获取使用某些中间件或在特定组中的路由?

时间:2019-05-27 10:15:17

标签: laravel

是否可以在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();

2 个答案:

答案 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);
         }
     }
 }