如何获取Laravel中指定名称路由组内的所有路由
Laravel 没有内置直接按路由组as前缀获取路由的方法,但可以基于官方提供的路由集合API自己封装,实现成本很低:
实现代码
你可以将以下函数放入项目的全局辅助函数文件(通常是app/helpers.php,如果没有可以自行创建后在composer.json的autoload字段中引入):
function getRoutesByGroup(string $groupAsPrefix): array { // 获取项目所有已注册路由 $allRoutes = \Illuminate\Support\Facades\Route::getRoutes(); $matchedRoutes = []; foreach ($allRoutes as $route) { $routeName = $route->getName(); // 路由组的as前缀会自动和子路由名通过.拼接,以此为判断依据 if ($routeName && str_starts_with($routeName, $groupAsPrefix . '.')) { $matchedRoutes[] = $route; } } return $matchedRoutes; }
如果你的PHP版本低于8.0,没有内置str_starts_with方法,可以替换判断逻辑为:
if ($routeName && substr($routeName, 0, strlen($groupAsPrefix . '.')) === $groupAsPrefix . '.')
使用示例
调用你想要的getRoutesByGroup('main')即可拿到符合要求的路由集合,每个元素都是Illuminate\Routing\Route对象,你可以按需提取属性:
$routes = getRoutesByGroup('main'); foreach ($routes as $route) { // 获取路由URI echo $route->uri(); // 获取完整路由名 echo $route->getName(); // 生成访问链接 echo route($route->getName()); }
注意事项
你提供的路由定义中有两个同名的Home路由,同组内路由名不能重复,否则后注册的路由会覆盖先注册的同名路由,实际使用时需要修正。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

