【问题标题】:Laravel Controller DelegationLaravel 控制器委托
【发布时间】:2015-04-22 08:27:45
【问题描述】:

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

目前我使用:

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

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

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

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


我们已经迁移到 Laravel 5 和 5.1,这仍然是一种很好的做事方式。如果你没有在 Laravel 中使用路由组,那么你就没有正确地使用 Laravel。

【问题讨论】:

    标签: laravel laravel-4 laravel-5 laravel-routing


    【解决方案1】:

    是的。只需在主控制器路由之前声明您的“异常”路由。

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

    【讨论】:

    • 这不是真的。如果它具有相同的 URI 和方法,它只会覆盖先前的路由。但是Route::controller('admin') 只会获取以admin 开头的任何请求。需要在控制器路由之前定义获取路由。
    • 你当然是对的,这是漫长的一天。编辑了我的答案。
    【解决方案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');
    });
    

    【讨论】:

    • 你被狙击了几分钟,但我正在奖励它提供的优雅的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2012-11-23
    • 1970-01-01
    相关资源
    最近更新 更多