我在允许用户覆盖我的包裹路线时遇到麻烦。由于该软件包是自动发现的,因此我无法为此usual fix进行操作。
期望的结果是,如果用户在routes-> web.php中定义了路由“ / home”,并且在我的包的routes.php文件中我也具有“ / home”,则使用了web.php版本。 / p>
让我知道需要解决什么其他代码!
包装服务提供商:
no longer relevant
解决方案:
要以我想要的方式解决此问题(在不破坏自动发现的情况下),您需要检查该路由内通常覆盖用户路由的其他路由。例如,此功能的路由“ / {slug}”通常会破坏用户的web.php路由,例如“ / userroute”。
我的解决方法是这样的。
public function page($slug){
$route = $slug;
$routes = Route::getRoutes();
foreach($routes as $r){
if($r->uri() == $route){
$name = $r->getActionName();
if(isset($name)){
return \App::call('\\'.$name);
}
}
}
//add route code after
我们需要直接调用路由,以防止发生无尽的重定向。这对我来说效果很好,因为我可以控制用户可以在其web.php文件中覆盖哪些包路由,但是我确信必须有一种更快的方法来实现所有这些功能。
答案 0 :(得分:1)
您可以在composer.json文件中添加一个 dont-discover 节点,以从自动发现中排除软件包。
"extra": {
"laravel": {
"providers": [
"WindfallInc\\Woodpecker\\WoodpeckerServiceProvider"
],
"dont-discover": [
"windfallinc/woodpecker"
]
}
}
Taylor在Medium上添加自动发现时谈到了Medium上的此功能。 https://medium.com/@taylorotwell/package-auto-discovery-in-laravel-5-5-ea9e3ab20518