Skip to content

Upgrade to api-platform 4.3.0: Error: Typed property ValidationException::$detail must not be accessed before initialization #7843

@BacLuc

Description

@BacLuc

API Platform version(s) affected: 4.3.0

Description
In

  • Use values from ProblemExceptionInterface #7776
    an additional path to convert an Exception to an error was introduced.
    But it is possible that the detail property is not initialized.
    A check must be put there + a fallback to the previous path where $exception->getMessage() is used for the detail.

Stack trace:
303) App\Tests\Api\ContentNodes\SingleText\CreateSingleTextTest::testCreateRejectsTooLongInstanceName
Error: Typed property ApiPlatform\Validator\Exception\ValidationException::$detail must not be accessed before initialization

/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/validator/Exception/ValidationException.php:167
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/state/ApiResource/Error.php:203
/home/runner/work/ecamp3/ecamp3/api/src/State/ValidationErrorProvider.php:37
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/state/CallableProvider.php:43
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/state/Provider/ReadProvider.php:84
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/symfony/Security/State/AccessCheckerProvider.php:68
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/symfony/Bundle/SwaggerUi/SwaggerUiProvider.php:50
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/json-api/State/JsonApiProvider.php:30
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/symfony/Security/State/AccessCheckerProvider.php:68
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/state/Provider/SecurityParameterProvider.php:50
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/state/Provider/DeserializeProvider.php:60
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/symfony/Security/State/AccessCheckerProvider.php:68
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/symfony/Validator/State/ValidateProvider.php:32
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/symfony/Security/State/AccessCheckerProvider.php:68
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/symfony/Validator/State/ParameterValidatorProvider.php:101
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/state/Provider/ParameterProvider.php:102
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/state/Provider/ContentNegotiationProvider.php:56
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/symfony/Controller/MainController.php:94
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/http-kernel/HttpKernel.php:183
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/http-kernel/HttpKernel.php:76
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/http-kernel/EventListener/ErrorListener.php:99
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/symfony/EventListener/ExceptionListener.php:50
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/event-dispatcher/Debug/WrappedListener.php:115
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/event-dispatcher/EventDispatcher.php:206
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/event-dispatcher/EventDispatcher.php:56
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php:126
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/http-kernel/HttpKernel.php:241
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/http-kernel/HttpKernel.php:91
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/http-kernel/Kernel.php:193
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/http-kernel/HttpKernelBrowser.php:62
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/framework-bundle/KernelBrowser.php:180
/home/runner/work/ecamp3/ecamp3/api/vendor/symfony/browser-kit/AbstractBrowser.php:398
/home/runner/work/ecamp3/ecamp3/api/vendor/api-platform/symfony/Bundle/Test/Client.php:115
/home/runner/work/ecamp3/ecamp3/api/tests/Api/ECampApiTestCase.php:248
/home/runner/work/ecamp3/ecamp3/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php:237

How to reproduce
Use Error::createFromException with a ValidationException.
https://github.com/ecamp/ecamp3/blob/renovate/api-platform/api/src/State/ValidationErrorProvider.php#L37
PR: ecamp/ecamp3#9231

Possible Solution
A check must be put there + a fallback to the previous path where $exception->getMessage() is used for the detail.

Additional Context

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