veilletech.fr
13 sept. Feed du jour
#03 SYMFONY Article

Symfony démonte FrameworkBundle en vingt bundles

Un framework qui se démonte est un framework qui a compris son poids.

Sur la branche 8.2 en développement, chaque section de configuration de FrameworkBundle part dans un bundle livré par son propre composant : MessengerBundle, HttpClientBundle, CacheBundle, RouterBundle, SerializerBundle, ValidationBundle et une quinzaine d'autres. Deux mécanismes le rendent possible sans casser les configurations existantes : un nœud de configuration peut aliaser celle d'une autre extension, et le tag container.remove_if_missing retire un service quand son paquet n'est pas installé.

3 min de lectureavancévidéo 1:24
Partager
Sommaire4 sections
  1. Ce qui se passe
  2. Le mécanisme
  3. Ce qui est déjà disponible
  4. À retenir

Ce qui se passe

FrameworkBundle est le bundle que toute application Symfony charge, et il porte la configuration de presque tout : le cache, le routeur, le sérialiseur, le validateur, Messenger, le client HTTP, le mailer. Sur la branche 8.2, ce bloc est démonté. Le commit qui résume l'opération le dit en une ligne : déplacer chaque section de configuration vers un bundle livré par son propre composant (90f7e56).

Les bundles ajoutés cette semaine :

Bundle Commit Bundle Commit
MessengerBundle edbf20d SerializerBundle 6023964
HttpClientBundle d4ae7d9 ValidationBundle b4fdf11
CacheBundle e8f7c6e RouterBundle 97b8c5d
MailerBundle efc11f4 AssetBundle c79f7e7
NotifierBundle 2492972 AssetMapperBundle 32f7b0f
LockBundle b7b8f40 RateLimiterBundle 1cdc3be
SchedulerBundle 9542a92 WebhookBundle 61c0d33
JsonStreamerBundle d68be53 HtmlSanitizerBundle 5a79078
PropertyInfoBundle 305fbdc WorkflowBundle 84003c7

Trois commits couvrent le reste par lots : les composants sans clé de configuration — JsonPath, Mime, ObjectMapper, Process (a1f8660) —, les sections sans couplage transverse — RemoteEvent, Semaphore, WebLink (0a73ec6) — et celles qui demandaient une inversion de dépendance : PropertyAccess, TypeInfo, Uid (102319b).

Le mécanisme

Éclater ce bundle-là aurait dû casser toutes les configurations existantes, parce qu'un nœud framework.messenger écrit dans un config/packages/*.yaml doit continuer à être compris. Deux ajouts discrets l'évitent :

Deux autres changements complètent l'affaire. Les bundles qui n'ont rien à faire au démarrage ne sont plus instanciés du tout (99b258a), et quand une extension manque, le conteneur nomme le paquet Composer à installer (4a4b29d) plutôt que d'échouer sans indication.

Ce qui est déjà disponible

Le reste de la semaine porte sur OAuth2 et OpenID Connect, et une partie est rétroportée jusqu'à la 6.4 — donc utilisable tout de suite :

En 8.2 s'ajoutent le durcissement de oidc_login contre les données de fournisseur malformées et les attaques par confusion de fournisseur (38c4888), les métadonnées de ressource protégée de la RFC 9728 (9200ad2), les réponses d'introspection signées de la RFC 9701 (d2e0f17), et la signature des jetons d'accès par défaut en RS256 (d8cb689).

À retenir

La semaine a vu fusionner 135 pull requests (111 de code, 24 de documentation) et fermer 57 tickets, pour 33 auteurs.

L'éclatement de FrameworkBundle n'est pas à déployer : 8.2 est en développement. Le durcissement OIDC, lui, est dans des branches maintenues, et la liste ci-dessus se lit comme une liste de contrôle sur une application qui s'authentifie auprès d'un fournisseur d'identité.