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

A.B*_*per 2 php laravel

问题是显而易见的。

我们知道 withRoute::getRoutes()方法可以获取 laravel 项目中所有定义的路由,如下所示:

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

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

return array_unique($arr);
Run Code Online (Sandbox Code Playgroud)

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

我认为可以传递路径名来getRoutes()执行此操作,但对我不起作用。

我怎样才能做到这一点 ?

Bog*_*dan 5

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

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

    return  $carry;
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


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