Получить маршруты, которые используют определенное промежуточное программное обеспечение или находятся в определенной группе? - PullRequest
0 голосов
/ 27 мая 2019

Возможно ли в Laravel в Controller получить все маршруты, входящие в одну группу, или маршруты, использующие определенное промежуточное программное обеспечение или что-то еще? Вот пример того, что я имею в виду:

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 ]

2 голосов
/ 27 мая 2019

Вы можете использовать встроенный в laravel метод collectMiddleware () , который будет возвращать все промежуточные программы, прикрепленные к маршруту в массиве, по умолчанию он будет включать маршрут 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');
0 голосов
/ 27 мая 2019

Я нашел встроенный метод 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);
         }
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...