如何不让包裹路线超载主要路线?

How not to overload main routes with package routes?

主要应用程序路线:

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'
];

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

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)).)*$'); 

不过看起来有点脏,而且不是动态的

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

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

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