如何获取路由组内的所有路由? [英] How to get all routes within a route group?
本文介绍了如何获取路由组内的所有路由?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要打印一个主菜单,而不是拥有存储链接/路由的数据库,我本以为有一种方法可以获取命名组中的所有路由,但我发现的只是按操作获取路由。
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屋!
查看全文