Symfony 8.2 Nouveauté Publié le

Laisser remonter une ValidationFailedException

Une ValidationFailedException non attrapée donne désormais une 422 avec la liste des violations : plus besoin de l'envelopper.

Notions abordées : ValidatorAPI

Nouveau dans Symfony 8.2 (en développement). #[MapRequestPayload] répond 422 avec la liste des violations quand la validation échoue. Une validation faite à la main n'avait pas cette chance : une ValidationFailedException non attrapée donnait une erreur 500. Il fallait donc l'envelopper dans une HttpException.

Avant

if (\count($violations) > 0) {
    throw new UnprocessableEntityHttpException('Inscription invalide.', new ValidationFailedException($inscription, $violations));
}

Depuis Symfony 8.2

if (\count($violations) > 0) {
    throw new ValidationFailedException($inscription, $violations);
}

ValidationFailedException porte désormais #[WithHttpStatus(422)]. Symfony produit la même réponse qu'avec #[MapRequestPayload] : un JSON type, title, status, detail et violations, chaque violation avec son propertyPath.

À faire

Simplifiez InscriptionController : lancez directement la ValidationFailedException. Les deux requêtes de l'onglet « Requêtes » montrent la réponse.

D'où vient la fonctionnalité : la pull request d'origine.