如何从 Laravel 5 的模块/目录中获取路由列表?

Posted

技术标签:

【中文标题】如何从 Laravel 5 的模块/目录中获取路由列表?【英文标题】:How do I get a list of routes from a module/directory in Laravel 5? 【发布时间】:2016-06-12 01:54:54 【问题描述】:

我在 app 文件夹中有 3 个模块,例如:用户模块、角色模块和权限模块。此外,我在每个模块中都有不同的 route.php 文件。现在我需要从用户模块获取路由列表。

我使用此代码从所有模块中获得了完整列表:

    $routeCollection =Route::getRoutes();  
    foreach ($routeCollection as $value) 
        echo $value->getPath()."<br>";
    

我想从特定模块或特定目录作为用户模块获取路由列表,而不是所有路由。

如何获取特定文件夹/模块/文件的路由列表?

【问题讨论】:

@AlexeyMezenin :: 我会的。最近几天我没有工作。道歉。 【参考方案1】:

如果您在要查找的路线中使用相同的控制器,则可以执行以下操作:

$routeCollection = \Route::getRoutes();

foreach ($routeCollection as $value) 
    $lookFor = 'UserController';
    $controller = $value->getAction();
    $controller = $controller['controller'];

    if (strpos($controller, $lookFor)) 
        echo "This route uses UserController controller ";
    

    echo $value->getPath()."<br>";

嗯,你明白了。您可以使用相同的方法搜索Route::getRoutes() 集合中的任何其他信息。

更新:

如果你想获取所有使用UserController 的路由,你可以这样做:

$routeCollection = \Route::getRoutes();
$userRoutesArray = [];

foreach ($routeCollection as $value) 
    $lookFor = 'UserController';
    $controller = $value->getAction();
    if(isset($controller['controller'])) 
        $controller = $controller['controller'];
    else
        continue;
    

    if (strpos($controller, $lookFor)) 
        array_push($userRoutesArray, $value->getPath();
    

然后您可以使用forforeach 对其进行迭代。

【讨论】:

我无法理解“$controller = $value->getAction()['controller'];”这一行.请您详细说明一下吗? 你试过了吗?如果不起作用,请尝试$action = $value-&gt;getAction(); $controller = $action['controller']; 它的返回 ERROR: "Undefined index: controller" 。我可以错过什么吗? $action = $value->getAction(); $controller = $action['controller']; 我已经更新了代码。另外,我已经在自己的应用程序中对其进行了测试,并且可以正常工作。 它在我的控制器中出现相同的错误“未定义索引 [控制器]”:$controller = $controller['controller'];

以上是关于如何从 Laravel 5 的模块/目录中获取路由列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 5.5 中获取网络路由列表?

laravel 5.2 如何在刀片中获取路由参数?

Laravel 5.6 artisan 命令从 URI 获取路由

如何在刀片文件 laravel 5.6 中获取当前路由名称

在 Laravel 5 中,如何禁用特定路由的 VerifycsrfToken 中间件?

从 Laravel 4.2 升级到 5.0 后获取 POST 的路由未定义错误