Группировка контроллеров Laravel в папках

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

Поэтому моя структура выглядит так:

controllers / BaseController.php HomeController.php admin / AdminController.php 

Теперь мой администраторский контроллер выглядит так:

 namespace Admin; class AdminController extends \BaseController { public function getHome() { return \View::make('admin.home'); } } 

Затем я могу сделать групповой маршрут для моей панели администратора:

 Route::group(['namespace' => 'Admin'], function() { Route::get('admin', ['as' => 'admin', 'uses' => 'AdminController@getHome']); }); 

В этом нет ничего плохого, но мне кажется, что это неудобство, чтобы пространство имен каждого класса в этих контроллерах использовалось с помощью \ . Есть ли способ, которым я могу исключить использование пространства имен для каждого класса в этих контроллерах под управлением администратора? Например, я не хочу набирать \View::make() , я хочу иметь View::make() .

Похоже, вы хотите, чтобы ваши классы контроллеров по-прежнему находились в глобальном пространстве имен, но хотели бы, чтобы их можно было организовать в папки.

Если вы посмотрите в своем composer.json , вы увидите, что папка контроллеров по умолчанию автоматически загружается с помощью «classmap» в папку. Таким образом, вы можете добавить в список дополнительные папки. Как это:

 "autoload": { "classmap": [ "app/commands", "app/controllers", "app/controllers/admin", <-- additional folders "app/models", "app/database/migrations", "app/database/seeds", ] }, 

Обратите внимание, что я добавил "app/controllers/admin" в массив classmap . Вы можете добавить столько, сколько хотите. Затем сделайте composer dump-autoload .

Другой способ сделать тот же подход – изменить app/start/global.php :

 ClassLoader::addDirectories(array( app_path().'/commands', app_path().'/controllers', app_path().'/controllers/admin', // additional folders app_path().'/models', app_path().'/helpers', app_path().'/database/seeds', )); 

AFAIK, это дает тот же эффект, что и модификация файла composer.json , за исключением того, что после добавления нового пути вам не нужно делать какие-либо composer .


Обратите внимание, что весь ответ выше будет хорошо работать, если вы не ожидаете, что ваш код станет значительно больше. Представьте, что вам нужно поддерживать десятки папок контроллера таким же образом, а также риск столкновения имен классов.