如何获取路由组内的所有路由? [英] How to get all routes within a route group?

查看:16
本文介绍了如何获取路由组内的所有路由?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要打印一个主菜单,而不是拥有存储链接/路由的数据库,我本以为有一种方法可以获取命名组中的所有路由,但我发现的只是按操作获取路由。

web.php

Route::group(['as' => 'main'], function () {
    Route::get('/', function () {
        return view('pages.start');
    })->name('Home');
    
    Route::get('/foobar', function () {
        return view('pages.foobar');
    })->name('Home');
    
    Route::get('/business', function () {
        return view('pages.business');
    })->name('Business');
});

我正在寻找类似以下内容的内容:

$routes = getRoutesByGroup('main');

我真的不敢相信在当前的Laravel中不存在这样的函数,但我似乎找不到这个。我错过了什么?

推荐答案

也许这可以部分解决您的问题

function getRoutesByStarting($start = '')
{
    $list = Route::getRoutes()->getRoutesByName();
    if (empty($start)) {
        return $list;
    }

    $routes = [];
    foreach ($list as $name => $route) {
        if (IlluminateSupportStr::startsWith($name, $start)) {
            $routes[$name] = $route;
        }
    }

    return $routes;
}

用法

getRoutesByStarting('main')

更一般的解决方案

function getRoutesByGroup(array $group = [])
{
    $list = Route::getRoutes()->getRoutes();
    if (empty($group)) {
        return $list;
    }

    $routes = [];
    foreach ($list as $route) {
        $action = $route->getAction();
        foreach ($group as $key => $value) {
            if (empty($action[$key])) {
                continue;
            }
            $actionValues = Arr::wrap($action[$key]);
            $values = Arr::wrap($value);
            foreach ($values as $single) {
                foreach ($actionValues as $actionValue) {
                    if (Str::is($single, $actionValue)) {
                        $routes[] = $route;
                    } elseif($actionValue == $single) {
                        $routes[] = $route;
                    }
                }
            }
        }
    }
    
    return $routes;
}

用法

getRoutesByGroup(['middleware' => 'api']);
getRoutesByGroup(['middleware' => ['api']]);
getRoutesByGroup(['as' => 'api']);
getRoutesByGroup(['as' => 'api*']);
getRoutesByGroup(['as' => ['api*', 'main']]);

这篇关于如何获取路由组内的所有路由?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆