是否可以在Controller的Laravel中获取一组中的所有路由,或使用某些中间件或其他某种东西的路由? 这是我的意思的示例:
Route::middleware(['auth', 'admin])->group(function () {
Route::patch('/updateClient', 'ClientController@update');
Route::resource('server-groups','ServerGroupsController');
});
在我的控制器中具有这样的内容,这将使我获得中间件为admin
的所有路由:
$routes = Route::where('middleware', 'admin');
目前,我只能使用以下代码获取所有路线:
$routes = Route::getRoutes();
答案 0 :(得分:2)
您可以使用laravel内置的gatherMiddleware()方法,该方法将返回连接到数组中某个路由的所有中间件,默认情况下它将包含web
路由,但是您可以根据需要将其删除,另外,请使用请求帮助程序中的route方法。
$routes = request()->route()->gatherMiddleware();
dd($routes); // will display : array(0 => 'web', 1 => 'auth', 2 => 'admin');
dd(array_slice($routes, 1, null, true)) // will display : array(1 => 'auth', 2 => 'admin');
答案 1 :(得分:0)
我发现了可以在路由上使用的内置方法middleware()
,它将为我提供一系列中间件,就像他在回答中提到的@tcj一样。因此,我采用了所有路由,并通过循环将所有需要中间件的路由添加到了新集合中。
$routes = Route::getRoutes();
$new_routes = new Collection;
foreach ($routes as $route) {
$middleware = $route->middleware();
for ($i = 0; $i < count($middleware); $i++) {
if ($middleware[$i] == 'admin') {
$new_routes ->push($route);
}
}
}