Laravel 控制器委派

Laravel Controller Delegation

努力让我的 Laravel 项目在这里井井有条,同时让它成长。

目前我使用:

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

...为了让控制器为一般管理页面提供服务。这工作正常,但是出于清洁原因,我想将特定的子查询委托给其他控制器。

例如,我希望 /admin/dashboard 解析为 AdminController@getDashboard。我还希望 /admin/gallery/ 解析为 AdminGalleryController@getIndex/admin/foo/bar 解析为 AdminFooController@getBar.

有没有简单的方法可以像这样慢慢扩展功能?


我们已经迁移到 Laravel 5 和 5.1,这仍然是做事的好方法。如果您没有在 Laravel 中使用路由组,那么您 Laravel 就没有做对。

是的。只需在主控制器路由之前声明您的 "exception" 路由。

Route::get('/admin/gallery','AdminGalleryContoller@getIndex');
Route::get('/admin/dashboard','AdminController@getDasboard');
Route::controller('/admin','AdminController');

您也可以将其他那些定义为控制器路由。 before 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');
});