veilletech.fr
9 oct. Feed du jour
#03 SYMFONY Article

Symfony 8.2 : EntityExists, Cron et Audio

Trois validateurs maison de moins. Et un NotBlank à ne pas oublier.

Symfony 8.2 ajoute trois contraintes au Validator : EntityExists vérifie qu'un identifiant reçu dans un DTO correspond bien à une entité, Cron valide une expression avec un vrai analyseur, et Audio contrôle durée, débit, canaux ou codec d'un fichier. Deux pièges : EntityExists laisse passer null et la chaîne vide, et Audio exige ffprobe sur le serveur.

2 min de lectureintermédiairevidéo 1:29
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. EntityExists
  3. Cron
  4. Audio
  5. À retenir

Ce qui se passe

Le Validator de Symfony compte déjà plus de 80 contraintes. La 8.2 en ajoute trois, chacune pour un besoin qui exigeait jusqu'ici un validateur maison.

EntityExists

Le cas d'école : un DTO d'API ou de formulaire reçoit l'identifiant d'une entité. Il fallait la charger, tester le résultat et lever une erreur à la main. EntityExists, apportée par Evgen Yurchenko, fait la recherche et rapporte une absence comme une violation sur la propriété concernée.

Cron

Une regex qui contrôle la forme d'une expression accepte 60 * * * * ou */0 * * * *, qui n'ont aucun sens. Cron, d'Erfan Momeni (PR #64538), passe par l'analyseur de dragonmantank/cron-expression — le paquet qu'utilise déjà le Scheduler pour ses déclencheurs. Il doit donc être installé.

Avec MODE_HASHED, la contrainte accepte aussi les expressions hachées du Scheduler, comme # # * * *, et les alias du type #daily, qui étalent les tâches récurrentes dans le temps.

Audio

Symfony 7.4 avait introduit Video ; Audio, de Valmont Pehaut-Pietri et Nicolas Grekas, en est le pendant. Elle juge le fichier sur ses caractéristiques réelles — durée, débit, fréquence d'échantillonnage, nombre de canaux, codec, conteneur — et non sur son seul type MIME et sa taille.

Elle étend File et en reprend toutes les options. mimeTypes vaut audio/* par défaut et, à la différence de Video, aucun codec ni conteneur n'est imposé tant que allowedCodecs et allowedContainers restent vides. Dès qu'un contrôle propre à l'audio est configuré, elle lance ffprobe via le composant Process : FFmpeg doit être présent sur le serveur, image de conteneur comprise.

Source : New in Symfony 8.2: EntityExists, Cron and Audio Constraints, Symfony, 8 octobre 2026.