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
文件?