Laravel проверяет, использует ли маршрут макрос - PullRequest
0 голосов
/ 08 февраля 2019

Невозможно определить, какие маршруты используют макрос.

Я зарегистрировал макрос в своем сервис-провайдере приложений и использовал его на нескольких маршрутах.Я хотел бы видеть, какие маршруты используют этот зарегистрированный макрос.Когда я вызываю hasMacro на любом маршруте, он возвращает true на всех маршрутах, независимо от того, использует ли его маршрут.

В документах говорится, что метод hasMacro возвращает true, если макрос зарегистрирован, что объясняет, почему все маршрутыверните истину.

Документы: https://laravel.com/api/5.6/Illuminate/Routing/Route.html

Есть ли способ определить, использует ли маршрут пользовательский макрос?Я был бы рад изменить группу, пространство имен или промежуточное программное обеспечение, когда этот макрос вызывается, а затем запросить это, но до сих пор не смогли сделать.Любые рекомендации?

Route::macro('graphQL', function ($type = 'query', $isList = true) {
            if (!in_array($type, ['query', 'mutation'])) throw new InvalidGraphQLTypeException();

            // throw new GraphQLControllerMethodException("This route is for a GraphQL endpoint and can not be accessed.");
        });
$graphQlRoutes = collect(Router::getRoutes())->filter(function($route) {
            /** @var Route $route */
            return $route->hasMacro('graphQL');
        });

1 Ответ

0 голосов
/ 08 февраля 2019

АГА!Простое решение.Внутри макроса просто установите свойство, а затем проверьте его.

Route::macro('graphQL', function ($type = 'query', $isList = true) {
            if (!in_array($type, ['query', 'mutation'])) throw new InvalidGraphQLTypeException();

            $this->graphQl = true;

            return $this;

            // throw new GraphQLControllerMethodException("This route is for a GraphQL endpoint and can not be accessed.");
        });
$graphQlRoutes = collect(Router::getRoutes())->filter(function($route) {
            return isset($route->graphQl) && $route->graphQl;
        });
...