覆盖laravel 5.7自动发现的包路由

时间:2018-09-11 23:21:44

标签: laravel laravel-5

我在允许用户覆盖我的包裹路线时遇到麻烦。由于该软件包是自动发现的,因此我无法为此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文件中覆盖哪些包路由,但是我确信必须有一种更快的方法来实现所有这些功能。

1 个答案:

答案 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