🇫🇷 Ce qu’il fallait voir au Forum PHP 2026
On commence la semaine avec un premier article autour du forum PHP 2026 chez JoliCode. Pour ceux qui veulent aller plus loin, habituellement les replays sortent courant décembre.
🇬🇧 Symfony 8.2
🇬🇧 Proving Authentication Methods
Pour venir compléter le sudo mode, présenté la semaine dernière, cette nouvelle version de Symfony apporte également la notion de « méthode d’authentification ».
On peut ainsi savoir si l’utilisateur s’est connecté via un mot de passe ou via une méthode d’authentification plus forte.
🇬🇧 Safer and More Flexible Logout
Afin d’éviter les déconnexions accidentelles, il sera possible de limiter celles-ci à certaines méthodes HTTP. Par exemple un formulaire en POST plutôt qu’un lien accessible en GET. Finit les bots qui se déconnectent en parcourant le site.
Pour simplifier la mise en place côté twig, 4 nouvelles fonctions sont ajoutées :
logout_button: crée le formulaire dans son intégralité.logout_form: retourne l’action et les valeurs des inputs pour construire le formulaire manuellement.impersonation_button&impersonation_exit_form: gérent le mode impersonnate.
Autre évolution pour ceux qui passent par des « connexions JSON », il sera possible de mettre à null la redirection dans la config. Ainsi le controller prendra la main et pourra personnaliser la réponse. Auparavant, il était nécessaire de passer par un event listener pour intercepter le retour automatique.
Avec l’arrivée de l’OIDC native, lorsqu’un utilisateur se déconnectera côté provider, vous pourrez être notifié en configurant un path. Une fois la signature vérifiée, cela mettra fin à la session dans le cache afin de déconnecter l’utilisateur.
🇬🇧 Attribute-Based Workflows
Plutôt que de passer par une config YAML ou PHP, le workflow pourra être configurer directement via des attributs PHP dans la classe qui définit les transitions.
De plus, les attributs pourront prendre les valeurs d’un enum plutôt que des scalaires.
L’attribut Symfony\Component\Workflow\Attribute\Place pourra être utilisé dans l’enum afin d’ajouter des métadonnées pour chaque état.
🇬🇧 Encrypted Doctrine Columns
Afin de chiffré des colonnes en base de données, le nouvel attribut Encrypted pourra être placé directement sur la propriété de votre entitée doctrine.
A la phase de compilation, Symfony se chargera de générer les types doctrines requis pour chiffrer lors de l’enregistrement et déchiffrer lors de la lecture.
🇬🇧 Locking Controllers
Il est parfois nécessaire de limiter l’exécution d’un controller. Par exemple, permettre une seule exécution à la fois ou même l’interdire quand une autre action est en cours.
Jusqu’à maintenant, il fallait implémenter manuellement le composant Lock.
Symfony 8.2 ajoute l’attribut Symfony\Component\HttpKernel\Attribute\Lock permettant de poser et libérer automatiquement un lock autour d’un controller.
Il est possible de le configurer sur plusieurs aspects :
- Configurer la clé en dépendant des paramètres de la route via
prefix-{parameter-name}. - Configurer la clé via une expression pour la rendre dynamique (à l’utilisateur en cours par exemple).
- Changer le comportement par défaut quand le verrou est déjà pris pour attendre qu’il se libère. Par défaut, si le lock est déjà pris, une erreur 409 est déclenchée.
- Conditionner le lock à une méthode HTTP.
A noter qu’il est possible de transmettre l’instance du Lock généré au controller. Pour cela, il suffit d’ajouter un attribut typé LockInterface ou SharedLockInterface en argument de la méthode.