如何获取路由组中的所有路由?



我需要打印一个主菜单,而不是有一个数据库,其中的链接/路由存储,我认为它会有一种方法来获得所有的路由在一个命名组,但我发现的是通过行动获得路由。

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']]);
$allRoutes = Route::getRoutes()->getRoutes(); // fetch all rotues as array
$name = 'main'; // specify your full route name
$grouped_routes = array_filter($allRoutes, function($route) use ($name) {
$action = $route->getAction(); // getting route action
if (isset($action['as'])) {
if (is_array($action['as'])) {
return in_array($name, $action['as']);
} else {
return $action['as'] == $name;
}
}
return false;
});
// output of route objects in the 'main' group
dd($grouped_routes);

相关内容

  • 没有找到相关文章

最新更新