【问题标题】:Get route by name in different namespace在不同的命名空间中按名称获取路由
【发布时间】:2020-04-14 20:10:31
【问题描述】:

文件夹结构:

-App
  -CustomClasses
    Menu.php
  -Http
    -Controllers
      TestController.php

当我使用TestController.php 中的Route::getRoutes() 时,我有所有路线,但是当我在Menu.php 中使用相同方法时,结果为空。因此我需要的route('route-name') 也无法正常工作。我认为这可能是因为命名空间不同,但是有没有简单的方法可以通过 Menu.php 中的路由名称或 Controllers 文件夹之外的任何其他文件来获取路由 url?

【问题讨论】:

  • 我认为你在这里遗漏了一些东西,路由是在单独的路由文件(web.php 等)中定义的,而不是在控制器中。
  • 是的。但我只想通过他们的名字获取他们的网址。
  • 如果你从每个文件中转储有问题的路由,你会得到什么? route('route-name') 在您的 TestController 和 Menu 类中?
  • 您需要在定义路由文件的同一命名空间中或在您自己的命名空间中定义路由文件
  • 您何时何地引用此Menu.php 文件?

标签: laravel routes laravel-5.8


【解决方案1】:

一段时间后,我自己找到了解决方案。在app/Providers/AppServiceProvider.php 中有两种方法:register()boot()。我在 boot() 方法中创建了 Menu 对象的实例,但仍然收到空路由列表。我注意到config/app.php 中有一个服务提供商列表,但这里的顺序很重要。

App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,

如您所见,AppSeriveProviderRouteServiceProvider 之前,这意味着Route 的启动方法最后运行,所以如果我尝试在AppServiceProvider 的创建者Menu 对象中获取它们,则还没有路由。

我的解决方案是创建 MenuServiceProvider 并在 Route 的提供程序之后加载它,而不是在 AppServiceProvider 中创建它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2011-02-16
    • 2018-03-27
    • 2016-04-08
    • 2018-05-05
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多