【问题标题】:How not to overload main routes with package routes?如何不使用包路线超载主要路线?
【发布时间】:2015-07-17 16:01:58
【问题描述】:

主要应用路径

Route::get('/login', [
    'as' => 'user.login', 
    'uses' => 'LoginController@login'
];
Route::get('/logout', [
    'as' => 'user.logout', 
    'uses' => 'LoginController@logout'
];
Route::get('/admin', [
    'as' => 'admin.index', 
    'uses' => 'AdminController@index'
];

我有一个带有 routes.php 文件的包(供应商)(例如:metrakit/mypackage)。在这个文件中,我有一条路线:

Route::get('/{slug}', [
    'as' => 'item.show', 
    'uses' => 'ItemController@show'
]; 

这条路线超载了我所有的主要路线!我的“/login”、“/logout”、“/bob”等路由都被重定向到我的控制器ItemController。

我不想有这样的路线

Route::get('/item/{slug}', array('as' => 'item.show', 'uses' => 'ItemController@show'); 

我想,我必须做一个这样的路线模式:

Route::pattern('slug', '^((?!(login|logout|admin)).)*$'); 

但它看起来有点脏,而且不是动态的。

所以我正在寻找更好的解决方案。

【问题讨论】:

  • 问题在于路由的加载顺序。您可能正在使用包boot() 方法中的自定义路由加载。这会在您的常规路线之前加载您的包裹路线。在顶部放置一条包罗万象的路线将完成您现在所看到的。我想您最好的选择是不在引导方法中自动加载包中的路由,而是在 before 过滤器中手动加载它们(在加载常规路由之后)。

标签: php laravel laravel-4 laravel-routing


【解决方案1】:

这可能就像在 app.php 文件的后期加载供应商的服务提供商一样简单。路由按照注册的顺序进行处理。

【讨论】:

    【解决方案2】:

    看起来你做对了。可能发生的一个问题是,在您的 route.php 文件中添加新路由时,您还必须添加您的路由模式。 但是,可以通过创建一个仅设置一次的全局变量来解决它。

    【讨论】:

    • 我选择了使用路由模式
    猜你喜欢
    • 2013-10-04
    • 2016-02-05
    • 2017-10-08
    • 2019-11-28
    • 2014-08-03
    • 2016-06-06
    • 2014-08-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多