Au programme de cette semaine :
- L’IA et les changements dans nos métiers
- L’IA et les blogs techniques ?
- Emuler un terminal dans un navigateur
- PHP 8.6 – Les nouveautés
- Symfony 8.2 : Amélioration des performances et validations des expressions, les collections dans les formulaires acceptent différents types, définissez votre firewall au niveau de la route, HTTPClient évolue pour simplifier les tests, moins de configuration dans vos formulaires.
🇫🇷 Grafikart – Interview avec On part en prod
Dans cette interview, on est invité à réfléchir sur ce que l’IA a changé dans notre quotidien de développeur. Quel est notre rôle ? Quand garder la main ? Comment apprendre (junior et pas que …).
🇫🇷 À quoi sert encore un blog technique à l’ère de l’IA ?
Si l’IA peut donner une réponse en quelques secondes, quel but pour un un blog technique ?
Les auteurs font le constat d’une baisse de fréquentation depuis le début d’année de leur blog.
Loin de baisser les bras ou de blâmer l’IA, ils ont décidé de revoir leur ligne éditoriale avec cette question : qu’apporte mon article que l’IA ne peut apporter ?
🇫🇷 A terminal emulator for the web
On est face à un besoin assez spécifique avec cette lib. Elle vous permet de simuler un terminal dans un navigateur. Pour des applications web proposant des tutoriels intégrés par exemple.
🇫🇷 PHP 8.6 : l’essentiel des nouveautés
L’article présente quelques nouveautés de PHP 8.6 qui doit sortir le 19 novembre 2026
- Nouvel espace de nom
Io\Poll: pour simplifier et gagner en performance lorsque l’on doit suivre plusieurs flux. - Ajout de
Time\Duration: une API unifiée permettant de représenter les durées, de les comparer, etc. - Appel partiel de fonction : Vous avez une méthode avec 3 arguments et vous souhaitez en générer une nouvelle avec 2 paramètres toujours identiques ? Cette nouveauté vient remplir ce rôle et complète parfaitement l’opérateur pipe
|>arrivé l’année dernière.
Pour aller plus loin, la page officielle des changements.
🇬🇧 Symfony 8.2
🇬🇧 Validated and Compiled Expressions
Avec Symfony 8.2, lors de la mise en cache, les expressions sont à présent stockées en PHP, il n’y a donc plus d’interprétation à la volée. Pourquoi ? On y gagne en performance et on peut aussi détecter une erreur d’écriture plus rapidement.
A noter qu’en mode debug, cette phase de compilation n’est pas appliquée pour éviter de reconstruire le cache à chaque modification. C’est là que la nouvelle commande lint:expressions entre en jeu pour valider vos expressions pendant vos sessions (ou celles de vos agents).
Les fonctions constant et enum, côté expression, évoluent pour renforcer la sécurité de vos applications. A la construction d’un ExpressionLanguage, il faudra à présent utiliser la nouvelle classe ConstantFunctionProvider permettant de préciser les constantes ou enums accessibles (possible d’utiliser des wildcards). Tout cela pour éviter qu’une entrée utilisateur permette d’aller piocher dans des secrets par exemple.
A noter que ne pas passer par cette nouvelle classe est déprécié. Vous pouvez toujours utiliser ['', '::*'] pour avoir le même comportement qu’actuellement.
🇬🇧 Polymorphic Form Collections
Une CollectionType peut à présent recevoir plusieurs types différent grâce à la nouvelle classe PolymorphicCollectionType qui permet de fournir un provider. Ce dernier a la charge de mapper chaque type d’objet au bon type côté formulaire.
Côté JS, si vous souhaitez générer des nouveaux blocs à la volée, l’option allow_add permet d’ajouter un prototype pour chaque type présent via un data-prototype-<name> dans l’HTML généré.
De plus, la nouvelle option entry_name permet de définir un nom pour chaque entrée plutôt que d’avoir un chiffre incrémental. Il n’est donc plus obligatoire de se baser sur l’ordre des éléments.
🇬🇧 Firewalls and Routes
A la déclaration de votre route, vous pouvez directement définir le firewall. Ce dernier aura la priorité sur tout les autres firewall configuré. Si le firewall n’existe pas, une exception est lancée.
L’ajout du nouveau service security.route_loader permet de charger toutes les routes de tous les firewalls. Il vient remplacer security.route_loader.logout qui est déprécié et sera supprimé en version 9.
Dans le cas du json_login et d’un authentificateur personnalisé, ce n’était pas simple de rediriger un utilisateur non connecté vers la page de connexion. La nouvelle clé de configuration entry_point_path permet cela en précisant un path, une url absolue ou une route.
🇬🇧 HTTP Recorder
Pour simplifier les tests, HttpClient permet à présent d’enregistrer le résultat d’une requête. Ainsi lors des tests, c’est cette version enregistrée qui est rejouée plutôt qu’un appel externe.
Pour ce faire :
- Ajouter
recorder: truedans la configuration de votre client de test. - Ajouter l’attribut
#[UseRecord]a la méthode de test qui a besoin d’un record - Lancer le tester avec
SYMFONY_HTTP_RECORDER=missingpour exécuter réellement la requête et enregistrer le résultat.
Il existe plusieurs valeurs pour cette variable d’environnement :
replay: par défaut, utilise le cache,missing: complète seulement les fichiers qu’il manque,record: relance tout et actualise les fichiers,passthrough: ignore le cache aussi bien en lecture qu’en écriture.
Des options existent pour masquer les secrets qui seraient contenus dans les requêtes enregistrées.
🇬🇧 Forms That Read Your Types
Dans nos formulaires, Symfony sait déjà déterminer le type des inputs à partir des entitées Doctrine. Avec Symfony 8.2, c’est également le cas à partir d’un DTO en repartant du typage de ses propriétés. On gagne donc sur l’écriture de la configuration.
De plus, les valeurs à vide seront mieux gérées nativement dans le cas où une propriété ne peut valoir null. Cela ne fonctionne que pour les champs déterminés dynamiquement. Si le type est précisé dans la configuration du formulaire, il faudra continuer de préciser empty_data.
Dans le cas de DTO en readonly ou pour les arguments obligatoires lors de l’instanciation, Symfony passera directement les valeurs lors du __construct en se basant sur le nom des arguments pour faire le mapping.
De plus, dans le cas du readonly, si l’on passe une instance, Symfony reprend les valeurs existantes, les complète avec les nouvelles valeurs et créer un nouvel objet sans toucher à l’objet existant ou déclencher d’erreur.