我希望能够使用包中的路由覆盖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()
始终会在包中的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']);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句