Symfony 6.3

Les fonctionnalités de la branche Symfony 6


Cette branche apporte de nouvelles fonctionnalités notamment permettant de mocker plus efficacement, ajoute de nouveaux attributs qui est apport fort de PHP et améliore les composants existants.

Symfony 5.4 – Symfony 6.0


- Mode strict pour les assets manquants :
Dans les applications Symfony, vous pouvez utiliser un fichier JSON manifest comme stratégie pour gérer les versions des assets. Lorsqu'un asset demandé n'est pas listé dans le fichier manifest.json, Symfony retourne le chemin non modifié de l'asset. Cela évite que l'application ne se casse la figure lorsqu'un asset est manquant mais génère des erreurs 404 dans le navigateur lorsqu'il essaie de charger l'asset.
Dans Symfony 5.4 a ajouté une option « strict_mode » (qui est désactivée par défaut). Lorsqu'elle est activée, l'application déclenche une exception pour les ressources manquantes, ce qui vous permet de résoudre le problème. C'est pourquoi il est recommandé d'utiliser '%kernel.debug%' comme valeur, afin que l'application s'arrête en dev/test mais continue à fonctionner en production :
Fichier assets.yaml

- Permettre d'exclure des répertoires de Yaml Linting.

- Nouvelle classe ULID Nil :
Le composant Uid fournit des utilitaires pour travailler avec les UUIDs et les ULIDs. Un UUID (Universally Unique Identifier) est un identifiant composé de 32 caractères hexadécimaux. ULID (Universally Unique Lexicographically Sortable Identifier) est une chaine de caractère de 26 caractères composés de dix caractères d'horodatage qui offrent une précision de l'ordre de la milliseconde et de seize caractères générés de manière aléatoire.

- Nouvelles fonctions pour les chaînes de caractères :
Le composant String fournit une API orientée objet pour les chaînes de caractères et traite les octets, les points de code UTF-8 et les grappes de graphèmes d'une manière unifiée.
Ajout de deux nouvelles fonctions à ce composant :
Fonction trim avec le composant String

- Code statut configurable dans les templates de rendus à partir des routes dans le fichier config/routes.yaml.

- Nouvelle méthode innerText() dans DomCrawler :
Cette fonction est similaire à text(), mais elle ne renvoie que le texte qui est le descendant direct du nœud actuel, à l'exclusion de tout nœud enfant.

- Nouvelle commande pour déboguer les variables d'environnement :
Symfony 5.4 a ajouté une nouvelle commande debug:dotenv pour vous aider à déboguer la valeur de toutes vos variables d'environnement et quels fichiers .env ont été vérifiés.

- Intervalles de limitation de vitesse plus longs :
Ajout des méthodes perMonth() et perYear() au composant RateLimite.

- Une manière plus simple de créer des erreurs de contrainte :
Symfony 5.4 a ajouté une nouvelle méthode createSingleConstraint() afin de simplifier la création d'erreurs de validation uniques.

- Verrouiller les fichiers lors de l'ajout de données :
Le composant Filesystem fournit des fonctionnalités indépendantes du système d'exploitation liées au système de fichiers. Un de ces utilitaires est la méthode appendToFile(), qui ajoute du contenu à la fin d'un fichier.
Symfony 5.4 a améliorée avec un troisième argument booléen optionnel. S'il est positionné à true, Symfony va acquérir un verrou exclusif sur le fichier tout en procédant à l'écriture (c'est la même chose que le drapeau \LOCK_EX en PHP).

- Extracteur PhpStan pour PropertyInfo :
composant PropertyInfo extrait des informations sur les propriétés des classes PHP en utilisant les métadonnées de sources populaires (Doctrine, PHP Reflection, PHPdoc, etc.).
Dans Symfony 5.4, nous ajoutons le support pour extraire des informations basées sur les métadonnées définies pour PHPStan, un outil populaire d'analyse statique de PHP.

Source : New in Symfony 5.4: Misc. features (part 1) (Symfony Blog)


Symfony 6.1


- Composant HtmlSanitizer :
Pour rappel : L'assainissement HTML est « le processus d'examen d'un document HTML et de production d'un nouveau document HTML qui ne conserve que les balises ou les attributs désignés comme sûrs et souhaités ».
Symfony 6.1 a ajoutons un sanitizer HTML basé sur PHP afin que vous puissiez transformer le contenu HTML généré par l'utilisateur en un contenu HTML sûr. Ce nouveau composant est similaire à la future API HTML Sanitizer du W3C et nous utilisons même les mêmes noms de méthodes lorsque c'est possible pour faciliter la courbe d'apprentissage. Composant HtmlSanitizer

Outre l'ajout et la suppression d'éléments et d'attributs HTML, vous pouvez forcer la valeur de certains attributs afin d'améliorer le contenu HTML résultant. Consultez la documentation du bundle HtmlSanitizer.

Source : New in Symfony 6.1: HtmlSanitizer component

- Syntaxe améliorée d’ExpressionLanguage :
Nouvelles options syntaxiques pour les nombres :
Composant ExpressionLanguage

Nouveaux opérateurs :
- Ajout d’un nouvel opérateur « ?. » qui est équivalent à l'opérateur null-safe de PHP. Il permet d'éviter les erreurs lors de l'accès à une propriété ou à une méthode d'un objet qui est null.
- Ajout de trois nouveaux opérateurs (contains, starts with et ends with) qui permettent de créer des expressions très lisibles.

Source : New in symfony 61 improved expressionlanguage syntax

- Nouveau switcher de locale :
l'objet/service LocaleSwitcher vous permet de changer en une fois la locale de tous les services qui sont étiquetés avec kernel.locale_aware.

- Amélioration des « requirements » dans le routage permettant d’utiliser les objets \BackedEnum :
Route requirement via des Enum

Source : New in Symfony 6.1: Improved routing

- Les builders de contextes des sérialiseurs :
Symfony 6.1 améliore la définition des contextes de sérialisation avec l'introduction des Context Builders. Au lieu d'avoir à gérer de simples tableaux, ces objets vous permettent de définir le contexte en utilisant une interface fluide qui fournit l'autocomplétion, la validation et la documentation.
Comme le montre cet exemple, vous pouvez mélanger à la fois des tableaux et des constructeurs d’objets et vous pouvez même fusionner ces objets contextuels entre eux :
Builders de contexte

- Les emails en draft :
Les brouillons sont des messages électroniques créés sous la forme d'un fichier portant l'extension .eml et l'en-tête X-Unsent. Cela permet aux clients de messagerie de les interpréter comme des brouillons que vous pouvez utiliser pour créer le message à envoyer.

Source : New in Symfony 6.1: draft emails

- Attributs de décoration des services  :
Vous pouviez déjà configurer la décoration des services en utilisant YAML, XML et PHP.

Note : Le pattern decorator est un pattern de conception qui permet de modifier le comportement d'un objet individuel sans affecter le comportement des autres objets de la même classe. Dans les applications Symfony, la décoration de service vous permet de changer le comportement d'un service sans le remplacer ou le modifier pour d'autres parties de l'application.

Source : New in Symfony 6.1: service decoration

Symfony 6.1 ajoute l'option de configurer la décoration en utilisant des attributs PHP. Par exemple :
Décoration de service

Source : New in Symfony 6.1: service decoration attributes

- Attribut Autowire  :
Symfony 6.1 introduit une autre fonctionnalité liée aux attributs afin que vous puissiez instruire la logique d'autowire avec des attributs PHP.
Attribute autowire

Source : New in Symfony 6.1: service autowiring attributes

- Prise en charge des « Canners » dans le normalisateur d'objets  :
Actuellement, le composant Serializer peut normaliser les propriétés avec des méthodes qui commencent par get, set, has, is, add ou remove (par exemple getUser(), isPublished(), addCategory(), etc.). Dans Symfony 6.1, le Serializer sera également capable de normaliser les « canner methods », qui sont celles qui commencent par le préfixe can (par exemple canPublish(), canApprove(), etc.)

- Contrôles détaillés de l'unicité des éléments de collection.


Symfony 6.2


- Amélioration du validateur de fichiers :
Ajout d’une nouvelle option appelée extensions. Cette option vérifie à la fois l'extension du fichier et son type de média.

- Amélioration de la prise en charge des énumérations :
Enums utilisé comme paramètres de Service, dans les variables d’environnement et dans les fichiers YAML.

Source : New in Symfony 6.2: improved enum support

- Composant Mailer plus extensible :
Nouveaux évènements liés à l'envoi d'e-mails : SentMessageEvent et FailedMessageEvent, injecter des Stamps (timbres) lors de l'envoi d'e-mails via Messenger, simplification des ajouts de Parts à un courriel : une méthode addPart() en remplacement de attach(), attachFromPath(), embed(), embedFromPath() and attachPart().

Source : New in Symfony 6.2: more extensible mailer

- Amélioration du composant Console.

- Amélioration du composant Security :
Ajout des méthode login() et logout() au service Security qui peut être appelé dans n’importe quels services ou contrôleur.
Ajout d’une nouvelle fonction de « vérificateur d'utilisateur enchaîné » qui permet d'appeler plusieurs vérificateurs d'utilisateur pour un pare-feu.

- Nouveau composant Clock :
Ce composant permet de découpler les applications de l'horloge du système. Cela vous permet de fixer le temps afin d'améliorer la testabilité de la logique sensible au temps.
La classe renvoie l'heure actuelle et permet d'utiliser n'importe quelle implémentation compatible avec le PSR-20 comme horloge globale dans votre application :
Composant clock


Symfony 6.3


- Amélioration du validateur de fichiers :
Symfony 6.3 introduit la classe utilitaire JsonMockResponse pour simuler une réponse JSON :
JsonMockResponse

Symfony 6.3 améliore la fonctionnalité de renvoi d’une request en cas d’erreur afin de permettre la définition de plusieurs URI de base qui seront sélectionnés alternativement lors de la relance des demandes.

- Amélioration du composant d’injection de dépendance :
- Les paramètres peuvent être autowire :
Autowire parameter

- Ajout de l’attribut #[AsAlias] :
Attibut AsAlias

$container->get('app.mailer'); // Would return a PhpMailer instance

- Ajout d'un atribut déinissant le constructor :
Lorsque vous utilisez une classe en tant que fabrique de services, vous pouvez utiliser l'option new constructor de l'option #[Autoconfigure] pour définir le nom de la méthode de la classe qui agit en tant que constructeur.
Attibut Autoconfigure constructor

Et pleins d’autres utilisation de l’attribut #[Autowire], comme la génération de closures.

Source : New in Symfony 6.3: dependency injection improvements

- Nouveau composant AssetMapper en remplacement de Webpack Encore (possiblement).

- Nouveau composant Scheduler :
Ce composant permet de déclencher des messages qui doivent être envoyés selon un calendrier prédéfini. Il réutilise les concepts de Messenger.
Par exemple, le composant enverra un message tous les deux jours qui signalera à votre application de faire quelque chose au sujet des commandes qui ont été créées mais qui n'ont pas encore été payées :
Composant Scheduler


Symfony 6.4 – Symfony 7.0


- Ajout d’un gestionnaire de sous-processus :
En considérant l’exemple suivant :
New process dans une Command

Exécuter la commande

Quelle sera la limite de mémoire de la commande cache:pool:prune exécutée dans app:my-command ? Ce ne sera pas -1, car les sous-processus en PHP n'héritent pas de la configuration de leurs processus parents. Au lieu de cela, ils utilisent la configuration par défaut définie dans les fichiers php.ini correspondants.
Symfony introduit la classe PhpSubprocess pour que le subprocess hérite de la configuration parente.

Source : New in Symfony 6.4: subprocess handler

- Améliorations de divers composants.