Делегирование контроллера Laravel

Пытаюсь организовать мой проект Laravel здесь, позволяя ему расти.

В настоящее время я использую:

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

... чтобы позволить контроллеру обслуживать общие страницы администрирования. Это работает нормально, однако я хотел бы делегировать определенные подзапросы другим контроллерам по соображениям чистоты.

Например, я хочу, чтобы /admin/dashboard разрешался в AdminController@getDashboard. Я также хотел бы, чтобы /admin/gallery/ разрешался в AdminGalleryController@getIndex, а /admin/foo/bar разрешался в AdminFooController@getBar.

Есть ли простой способ медленно расширять функциональность, подобную этой?


Мы перешли на Laravel 5 и 5.1, и это по-прежнему остается хорошим способом работы. Если вы не используете группы маршрутов в Laravel, значит, вы делаете Laravel неправильно.


person Derrek Bertrand    schedule 20.02.2015    source источник


Ответы (2)


Вы также можете определить эти другие маршруты как маршруты контроллера. Просто сделайте это до Route::controller('admin'), потому что Laravel ищет зарегистрированные маршруты в других, которые вы их определяете. Поскольку /admin/gallery будет соответствовать Route::controller('admin'), а также Route::controller('admin/gallery'), последнее должно быть определено первым:

Route::controller('admin/gallery', 'AdminGalleryController');
Route::controller('admin/foo', 'AdminFooController');
Route::controller('admin', 'AdminController');

Вместо того, чтобы писать admin каждый раз, когда группа маршрутов может быть хорошим улучшением:

Route::group(['prefix' => 'admin'], function(){
    Route::controller('gallery', 'AdminGalleryController');
    Route::controller('foo', 'AdminFooController');
    Route::controller('/', 'AdminController');
});
person lukasgeiter    schedule 20.02.2015
comment
Вы были обстреляны на несколько минут, но я награждаю ответ за элегантность, которую он обеспечивает. - person Derrek Bertrand; 25.02.2015

Да. Просто объявите свои «исключительные» маршруты перед основным маршрутом контроллера.

Route::get('/admin/gallery','AdminGalleryContoller@getIndex');
Route::get('/admin/dashboard','AdminController@getDasboard');
Route::controller('/admin','AdminController');
person Joe    schedule 20.02.2015
comment
Это не правда. Он переопределит предыдущий маршрут только в том случае, если у него будет тот же URI и метод. Однако Route::controller('admin') просто захватит любой запрос, начинающийся с admin. Маршруты получения должны быть определены до маршрута контроллера. - person lukasgeiter; 20.02.2015
comment
Вы, конечно, правы, это был долгий день. Отредактировал мой ответ. - person Joe; 20.02.2015