Skip to content

[Laravel] Utilising Filters on ApiResource or Operation #6970

@jedkirby

Description

@jedkirby

API Platform version(s) affected:4.0.17

Description
When a filter is added to either an ApiResource, or a Operation such as GetCollection, the Swagger documentation fails on the following error:

2025-02-14 15:04:22 NOTICE: PHP message: PHP Fatal error:  Uncaught Error: Call to a member function has() on null in /var/www/html/vendor/api-platform/openapi/Factory/OpenApiFactory.php:584
2025-02-14 15:04:22 Stack trace:
2025-02-14 15:04:22 #0 /var/www/html/vendor/api-platform/openapi/Factory/OpenApiFactory.php(254): ApiPlatform\OpenApi\Factory\OpenApiFactory->getFiltersParameters(Object(ApiPlatform\Metadata\GetCollection))
2025-02-14 15:04:22 #1 /var/www/html/vendor/api-platform/openapi/Factory/OpenApiFactory.php(110): ApiPlatform\OpenApi\Factory\OpenApiFactory->collectPaths(Object(App\Api\Metadata\CustomerApiResource), Object(ApiPlatform\Metadata\Resource\ResourceMetadataCollection), Object(ApiPlatform\OpenApi\Model\Paths), Object(ArrayObject), Object(ArrayObject), Array)
2025-02-14 15:04:22 #2 /var/www/html/vendor/api-platform/laravel/State/SwaggerUiProvider.php(84): ApiPlatform\OpenApi\Factory\OpenApiFactory->__invoke(Array)
2025-02-14 15:04:22 #3 /var/www/html/vendor/api-platform/laravel/State/ValidateProvider.php(43): ApiPlatform\Laravel\State\SwaggerUiProvider->provide(Object(ApiPlatform\Metadata\Error), Array, Array)
2025-02-14 15:04:22 #4 /var/www/html/vendor/api-platform/state/Provider/DeserializeProvider.php(56): ApiPlatform\Laravel\State\ValidateProvider->provide(Object(ApiPlatform\Metadata\Error), Array, Array)
2025-02-14 15:04:22 #5 /var/www/html/vendor/api-platform/laravel/JsonApi/State/JsonApiProvider.php(36): ApiPlatform\State\Provider\DeserializeProvider->provide(Object(ApiPlatform\Metadata\Error), Array, Array)
2025-02-14 15:04:22 #6 /var/www/html/vendor/api-platform/state/Provider/SecurityParameterProvider.php(39): ApiPlatform\Laravel\JsonApi\State\JsonApiProvider->provide(Object(ApiPlatform\Metadata\Error), Array, Array)
2025-02-14 15:04:22 #7 /var/www/html/vendor/api-platform/laravel/State/ParameterValidatorProvider.php(87): ApiPlatform\State\Provider\SecurityParameterProvider->provide(Object(ApiPlatform\Metadata\Error), Array, Array)
2025-02-14 15:04:22 #8 /var/www/html/vendor/api-platform/state/Provider/ParameterProvider.php(103): ApiPlatform\Laravel\State\ParameterValidatorProvider->provide(Object(ApiPlatform\Metadata\Error), Array, Array)
2025-02-14 15:04:22 #9 /var/www/html/vendor/api-platform/laravel/State/AccessCheckerProvider.php(45): ApiPlatform\State\Provider\ParameterProvider->provide(Object(ApiPlatform\Metadata\Error), Array, Array)
2025-02-14 15:04:22 #10 /var/www/html/vendor/api-platform/state/Provider/ContentNegotiationProvider.php(51): ApiPlatform\Laravel\State\AccessCheckerProvider->provide(Object(ApiPlatform\Metadata\Error), Array, Array)
2025-02-14 15:04:22 #11 /var/www/html/vendor/api-platform/laravel/Controller/ApiPlatformController.php(79): ApiPlatform\State\Provider\ContentNegotiationProvider->provide(Object(ApiPlatform\Metadata\Error), Array, Array)
2025-02-14 15:04:22 #12 /var/www/html/vendor/api-platform/laravel/Exception/ErrorHandler.php(161): ApiPlatform\Laravel\Controller\ApiPlatformController->__invoke(Object(Illuminate\Http\Request))
2025-02-14 15:04:22 #13 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(685): ApiPlatform\Laravel\Exception\ErrorHandler->ApiPlatform\Laravel\Exception\{closure}(Object(Symfony\Component\ErrorHandler\Error\FatalError), Object(Illuminate\Http\Request))
2025-02-14 15:04:22 #14 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(586): Illuminate\Foundation\Exceptions\Handler->renderViaCallbacks(Object(Illuminate\Http\Request), Object(Symfony\Component\ErrorHandler\Error\FatalError))
2025-02-14 15:04:22 #15 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(225): Illuminate\Foundation\Exceptions\Handler->render(Object(Illuminate\Http\Request), Object(Symfony\Component\ErrorHandler\Error\FatalError))
2025-02-14 15:04:22 #16 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(202): Illuminate\Foundation\Bootstrap\HandleExceptions->renderHttpResponse(Object(Symfony\Component\ErrorHandler\Error\FatalError))
2025-02-14 15:04:22 #17 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(238): Illuminate\Foundation\Bootstrap\HandleExceptions->handleException(Object(Symfony\Component\ErrorHandler\Error\FatalError))
2025-02-14 15:04:22 #18 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(290): Illuminate\Foundation\Bootstrap\HandleExceptions->handleShutdown()
2025-02-14 15:04:22 #19 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->Illuminate\Foundation\Bootstrap\{closure}()
2025-02-14 15:04:22 #20 {main}
2025-02-14 15:04:22   thrown in /var/www/html/vendor/api-platform/openapi/Factory/OpenApiFactory.php on line 584

Furthermore, hitting the endpoint not via the documentation, i.e. using application/json, doesn't trigger the error, but it also does not fire the Filter as is expected.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions