通过 Route::getRoutes() laravel 方法获取特定路径的路由

Posted

技术标签:

【中文标题】通过 Route::getRoutes() laravel 方法获取特定路径的路由【英文标题】:Get routes of a specific path via Route::getRoutes() laravel method 【发布时间】:2016-07-26 16:50:19 【问题描述】:

问题很明显。

我们知道使用Route::getRoutes() 方法可以像这样获取 laravel 项目中所有定义的路由:

$routeCollection = Route::getRoutes();
$arr    =   [];

foreach ($routeCollection as $value) 
    $arr[] =    $value->getPath();


return array_unique($arr);

但我想在特定路径中获取所有已定义的路由,例如 /admin

我认为可以将路径名传递给getRoutes(),但对我不起作用。

我该怎么做?

【问题讨论】:

【参考方案1】:

这是一个使用 Laravel 集合的解决方案:

$routes = collect(Route::getRoutes()->getRoutes())->reduce(function ($carry = [], $route) 
    !starts_with($route->getPath(), 'admin') ?: $carry[] = $route->getPath();

    return  $carry;
);

所以现在routes 数组将返回以admin 开头的路由路径列表。这是那里发生的事情:

使用Route::getRoutes() 将返回一个RoutesCollection,它有自己的getRoutes 方法,该方法返回一个Illuminate\Routing\Route 实例的平面数组。然后,您可以将其传递给 collect 方法,该方法将返回所有这些路由的 Collection

现在您只需删除不以admin 开头的值。如果这是一个简单的值数组,可以使用 filter 方法轻松实现,但由于这是一个对象数组,并且您想要只能通过对 getPath 的方法调用访问的 path 字符串,那么集合的reduce 方法可以用作解决方法。

此外,您会注意到条件检查路径是否以admin 开头而不是/admin。这是因为 Laravel 路由器在构建路由集合时会自动去除前导斜杠。


您可以在Laravel Documentation 中阅读有关集合的更多信息。

【讨论】:

我将 laravel 升级到 5.5,现在出现错误:Method getPath does not exist.。似乎它被删除了。有什么替代品吗? 替换为uri()【参考方案2】:

我会选择正则表达式:

    $routeCollection = Route::getRoutes();
    $arr             = [];

    foreach ($routeCollection as $value) 
        if (preg_match('/^\/?admin/', $value->getPath())) 
            $arr[] = $value->getPath();
        
    
    $filteredRoutes = array_unique($arr);

【讨论】:

【参考方案3】:

你可以使用this apporach:

$routeCollection = Route::getRoutes();
$adminRoutes = [];

foreach ($routeCollection as $value) 
    strpos($value->getPath(), 'admin') === false ?: $adminRoutes[] = $value->getPath();

【讨论】:

getRoutes() 方法返回一个RoutesCollection 实例,与普通的Collection 不同,它没有任何where 方法,所以这不起作用。请修改您的答案。 现在我会知道的,谢谢。我想在这种情况下,最好的方法就是使用简单的循环来过滤路由。我已经更新了我的答案。

以上是关于通过 Route::getRoutes() laravel 方法获取特定路径的路由的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5:如何获取所有路线的路径?

最小角回归 LARS算法包的用法以及模型参数的选择

岭回归LASSO与LAR的几何意义

PHP PHPBBForumlarındaKullanıcılarıŞifresiniTopluHa

c_cpp Üçbasamaklırakamlarıbirbirindenfarklıtümsayılarıekrandagösterenvebu kurala

c_cpp Kullanıcıdan1000sidıgirmesiisteniyor。 Girilensayılariçerisindebusayılarınortalamasındanda