Чтобы организовать мои контроллеры, я хотел бы отсортировать их в папках. Например, у меня есть панель администратора, в которой используется множество контроллеров, которые я не хочу смешивать с другими контроллерами. Я переместил эти контроллеры в папку в каталоге моих / контроллеров.
Поэтому моя структура выглядит так:
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
.
Обратите внимание, что весь ответ выше будет хорошо работать, если вы не ожидаете, что ваш код станет значительно больше. Представьте, что вам нужно поддерживать десятки папок контроллера таким же образом, а также риск столкновения имен классов.