Что Laravel папку контроллер маршрутизации



Я новичок в Laravel. Чтобы попытаться сохранить мое приложение организованным, я хотел бы поместить мои контроллеры во вложенные папки папки контроллера.



controllers
---- folder1
---- folder2


Я пытался направить к контроллеру, но laravel не находит его.



Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');


что я делаю не так?

715   11  

11 ответов:

для Laravel 5.3 выше

php artisan make:controller test/TestController

это создаст тестовую папку, если она не существует, а затем создает TestController внутри.

TestController будет выглядеть так:

<?php
namespace App\Http\Controllers\test;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class TestController extends Controller
{
    public function getTest()
    {
        return "Yes";
    }
}
?>

в маршрутах,

Route::get('/test','test\TestController@getTest');

добавьте контроллеры в свои папки:

controllers\
---- folder1
---- folder2

создать свой маршрут, не указав папку:

Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');

выполнить

composer dump-autoload

и попробуйте снова

для тех, кто использует Laravel 5, вам нужно установить пространство имен для контроллера в подкаталоге (Laravel 5 все еще находится в разработке, и изменения происходят ежедневно)

чтобы получить структуру папок, как:

Http
----Controllers
    ----Admin
            PostsController.php
    PostsController.php

namespace Admin\PostsController.файл php вот так:

<?php namespace App\Http\Controller\Admin;

use App\Http\Controllers\Controller;

class PostsController extends Controller {

    //business logic here
}

тогда ваш маршрут для этого:

$router->get('/', 'Admin\PostsController@index');

и, наконец, не для того, чтобы сделать либо композитор или ремесленник дамп

composer dump-autoload

или

php artisan dump

1.создайте свою подпапку так же, как следующие:

app
----controllers
--------admin
--------home

2.настройка кода в приложении / маршрутах.php

<?php
// index
Route::get('/', 'Home\HomeController@index');

// admin/test
Route::group(
    array('prefix' => 'admin'), 
    function() {
        Route::get('test', 'Admin\IndexController@index');
    }
);
?>

3.напишите sth в app / controllers/admin / IndexController.php, например:

<?php
namespace Admin;

class IndexController extends \BaseController {

    public function index()
    {
        return "admin.home";
    }
}
?>

4.доступ к сайту, например: localhost / admin / test вы увидите "админ.главная" на странице

ps: Пожалуйста, игнорируйте Мой бедный английский

для * * Laravel 5 или Laravel 5.1 LTS оба **, если у вас есть несколько контроллеров в папке администратора,Route::group будет очень полезно для вас. Например:

моя структура папок:

Http
----Controllers
    ----Api
          ----V1
                 PostsApiController.php
                 CommentsApiController.php
    PostsController.php

PostAPIController:

<?php namespace App\Http\Controllers\Api\V1;

use App\Http\Requests;
use App\Http\Controllers\Controller;   
use Illuminate\Http\Request;

class PostApiController extends Controller {  
...

В Моем Маршруте.php, я установил namespace группы Api\V1 и в целом это выглядит так:

Route::group(
        [           
            'namespace' => 'Api\V1',
            'prefix' => 'v1',
        ], function(){

            Route::get('posts', ['uses'=>'PostsApiController@index']);
            Route::get('posts/{id}', ['uses'=>'PostssAPIController@show']);

    });

для перемещения деталей, чтобы создать вложенную папку, посетите ниже ссылка на сайт: https://laracasts.com/discuss/channels/general-discussion/reflectionexception-class-apphttpcontrollersadminadmincontroller-does-not-exist

php artisan make:controller admin/CategoryController

здесь admin-это подкаталог под app / Http / Controllers и CategoryController-это контроллер, который вы хотите создать внутри каталога

просто нашел способ как это сделать:

просто добавьте пути к /app/start / global.php

ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/controllers/product',
    app_path().'/models',
    app_path().'/database/seeds',

));

Я использую Laravel 4.2. Вот как я это делаю:
У меня есть структура каталогов, как это:
приложение
--контроллеры
----админ
------AdminController.php

после того, как я создал контроллер я поставил композитора.json путь к новому каталогу администратора:

"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/controllers/admin",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
}, 

далее я побежал

composer dump-autoload

а то

php artisan dump-autoload

затем в стороны.php у меня есть контроллер, включенный следующим образом:

Route::controller('admin', 'AdminController');

и все работает нормально.

если вы используете Laravel 5.3 или выше, вам не нужно так много усложнять, как говорили другие ответы. Просто используйте команду ремесленника по умолчанию для создания нового контроллера. Например, если я хочу создать . Я бы набрал

php artisan make:controller User/User

в маршрутах,

Route::get('/dashboard', 'User\User@dashboard');

делать только это было бы хорошо, и теперь на localhost/dashboard находится страница.

надеюсь, что это помогает.

в Laravel 5.6, предполагая, что имя вашей подпапки ' является Api:

в вашем контроллере вам нужны эти две строки:

namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;

и в вашем маршруте файлом api.php необходимо:

Route::resource('/myapi', 'Api\MyController');

Я думаю, чтобы сохранить контроллеры для Admin и Front в отдельных папках, пространство имен будет работать хорошо.

пожалуйста, посмотрите на приведенную ниже структуру каталогов Laravel, которая отлично работает для меня.

app
--Http
----Controllers
------Admin
--------DashboardController.php
------Front
--------HomeController.php

маршруты в разделе " Маршруты / web.php " файл будет, как показано ниже

/* All the Front-end controllers routes will work under Front namespace */

Route::group(['namespace' => 'Front'], function () {
    Route::get('/home', 'HomeController@index');
});

и для админ раздела, это будет выглядеть как

/* All the admin routes will go under Admin namespace */
/* All the admin routes will required authentication, 
   so an middleware auth also applied in admin namespace */

Route::group(['namespace' => 'Admin'], function () {
    Route::group(['middleware' => ['auth']], function() {            
        Route::get('/', ['as' => 'home', 'uses' => 'DashboardController@index']);                                   
    });
});

надеюсь, что это помогает!!

Comments

    Ничего не найдено.