Laravel 按名称在不同命名空间中获取路由

Laravel 按名称在不同命名空间中获取路由,laravel,routes,laravel-5.8,Laravel,Routes,Laravel 5.8,文件夹结构: -App -CustomClasses Menu.php -Http -Controllers TestController.php 当我从TestController.php中使用Route::getRoutes()时,我得到了所有路由,但当我在菜单中使用相同的方法时。php结果为空。因此,我需要的route('route-name')也不能正常工作。我想这可能是因为名称空间不同,但有没有简单的方法可以通过Menu.php或Controlle

文件夹结构:

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

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

过了一段时间,我自己找到了解决方案。在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,
正如您所看到的,
AppSeriveProvider
RouteServiceProvider
之前,这意味着路由的引导方法是最后运行的,所以如果我尝试在
AppServiceProvider
中创建的菜单对象中获取路由,则还没有路由


我的解决方案是创建
MenuServiceProvider
并在路由提供程序之后加载它,而不是在
AppServiceProvider
中创建它。我认为您在这里缺少了一些东西,路由是在单独的路由文件(web.php等)中定义的,而不是在控制器中。是的。但是我只想通过他们的名字来获取他们的url。如果你从每个文件中转储有问题的路由,你会得到什么<代码>路由('route-name')在TestController和Menu类中?您需要在定义路由文件的同一命名空间中,或者在自己的命名空间中定义路由文件何时何地引用此
Menu.php
文件?