![](/img/trans.png)
[英]How can I use laravel 5.1 middleware parameter for multiple auth and protected routes?
[英]Can I use Laravel 5 Middleware to allow packages to override app routes?
我希望能够使用包中的路由覆盖app / Http / routes.php中定义的路由。
例如,在app / Http / routes.php中,我可能会这样:
Route::get('/search/{type?}',['as' => 'search','uses' => 'SearchController@search']);
我希望能够在/vendor/author/package/src/Http/routes.php中定义它:
Route::get('/search/properties', ['as' => 'properties','uses' => 'PropertyController@search']);
首先加载app / Http / routes.php文件,以便使用它们中的路由,而不是包。
在Laravel 4中,我会使用App :: before或App :: after来执行此操作,为他们提供优先级。
像包裹路线一样:
App::before(function() {
Route::get('/search/properties', ['as' => 'properties','uses' => 'PropertyController@search']);
});
我不知道如何在Laravel 5中实现这一点。我发现这个https://mattstauffer.co/blog/laravel-5.0-middleware-filter-style ,但不知道怎么用它来做我想要的。
编辑:Laravel 4执行此操作的方法将允许为每个路由设置此优先级,因此我不只是在应用程序之前加载所有包路由。
您应该能够通过更改config/app.php
中服务提供商的顺序来更改路由的注册顺序。
目前它可能看起来像这样:
'providers' => [
// ...
'App\Providers\RouteServiceProvider',
// ...
'Vendor\Package\PackageServiceProvider',
],
现在只需更改顺序,以便首先加载包:
'providers' => [
// ...
'Vendor\Package\PackageServiceProvider', // register package routes first
'App\Providers\RouteServiceProvider',
// ...
],
要优先考虑特定路由,您可以(ab)使用服务提供者register()
方法。 我真的不喜欢方法,但它有效,我找不到更好的东西......
加载服务提供程序时,将调用每个提供程序的register()
方法。 之后(并以相同的顺序) boot()
方法。 这意味着独立于提供者的顺序,包中的register()
方法将始终在RouteServiceProvider
的boot()
方法之前RouteServiceProvider
。 这可能看起来像这样:
class PackageServiceProvider extends ServiceProvider {
public function boot(){
// register the regular package routes
}
public function register(){
// register route "overrides"
// for example like this: (obviously you could also load a file)
app('router')->get('/search/properties', ['as' => 'properties','uses' => 'PropertyController@search']);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.