![](/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.