php – 我可以使用Laravel 5中间件来允许包覆盖应用程序路由吗?
我希望能够使用包中的路由覆盖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','uses' => 'PropertyController@search']); }); 我不知道如何在Laravel 5中实现这一点.我发现这个https://mattstauffer.co/blog/laravel-5.0-middleware-filter-style,但不知道如何使用它来做我想要的. 编辑:Laravel 4执行此操作的方法将允许为每个路由设置此优先级,因此我不只是在应用程序之前加载所有包路由. 解决方法
您应该能够通过更改config / app.php中服务提供商的顺序来更改路由的注册顺序.
目前它可能看起来像这样: 'providers' => [ // ... 'AppProvidersRouteServiceProvider',// ... 'VendorPackagePackageServiceProvider',], 现在只需更改顺序,以便首先加载包: 'providers' => [ // ... 'VendorPackagePackageServiceProvider',// register package routes first 'AppProvidersRouteServiceProvider',// ... ], 要优先考虑特定路由,您可以(ab)使用服务提供者register()方法.我真的不喜欢方法,但它有效,我找不到更好的东西…… 加载服务提供程序时,将调用每个提供程序的register()方法.之后(并以相同的顺序)boot()方法.这意味着独立于提供者的顺序,包中的register()方法将始终在RouteServiceProvider中的boot()方法之前调用.这可能看起来像这样: 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','uses' => 'PropertyController@search']); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |