Slide 1

Slide 1 text

Quoi de neuf dans Symfony 6.1 ? @fancyweb_

Slide 2

Slide 2 text

github.com/symfony/symfony ⊚ Des composants découplés ⊚ Un framework ⊚ Open-source et performant ⊚ Stable et prévisible 2

Slide 3

Slide 3 text

Cycle de vie 3

Slide 4

Slide 4 text

4 types de contributions ⊚ Minor : ne change strictement aucun comportement ⊚ Bug : résout clairement un mauvais comportement ⊚ Feature : tout changement qui n’est pas minor ou bug ⊚ Security : cas spécial pour les releases de Sécurité 4

Slide 5

Slide 5 text

Quel est le plan ? ⊚ Il n’y a pas de plan ⊚ Tout le monde peut participer ⊚ Il y a toujours un tas de problèmes à régler et d’améliorations possibles ⊚ Des idées naissent et des idées meurent 5

Slide 6

Slide 6 text

Par contre il y a des règles ⊚ Revue de code et validation par la core team ⊚ La maintenabilité est capitale ⊚ De vrais cas d’utilisation, pas de la théorie ⊚ Et bien d’autres ! 6

Slide 7

Slide 7 text

Les 6 derniers mois de contributions 7 ⊚ ~ 930 pull requests (~ 5 par jour) ⊚ ~ 230 merged minors ⊚ ~ 320 merged bugs ⊚ ~ 130 merged features

Slide 8

Slide 8 text

“Living on the edge” & feature freeze ⊚ Peaufinage pendant au moins 1 mois ⊚ Des dizaines de features sont mises en avant sur le blog à chaque nouvelle version, pensez-y ! ⊚ Cercle vertueux : PR → doc / blog → PR 8

Slide 9

Slide 9 text

composer require php ">=8.1" ⊚ 1er bump PHP sur une version de Symfony mineure ⊚ Problème lié au preloading (feature PHP 7.4) ⊚ Déjà une très forte adoption de PHP 8.1 ⊚ Les types des propriétés sont de retour 9

Slide 10

Slide 10 text

Exemple : First-class callable 10

Slide 11

Slide 11 text

Exemple : array_is_list() 11

Slide 12

Slide 12 text

Modernisation du code 12 ⊚ Le code peut profiter des nouveautés PHP 8.1 ⊚ Propriétés readonly (private readonly $foo) ⊚ New in initializer (= new Foo() dans le constructeur) ⊚ Pure intersection types (Foo&Bar $var)

Slide 13

Slide 13 text

Modernisation du code 13 ⊚ Continuation du travail déjà largement entamé sur Symfony 6.0 + PHP 8.0 ⊚ Toujours plus de types à ajouter ⊚ str_starts_with, str_ends_with et str_contains ⊚ Nullsafe operator ?->

Slide 14

Slide 14 text

Exemple : non-capturing catches 14

Slide 15

Slide 15 text

Exemple : match expression 15

Slide 16

Slide 16 text

Aparté sur le polyfill 16 ⊚ symfony/polyfill ⊚ Backport de certaines features de PHP ⊚ Permet de profiter de certaines nouveautés ⊚ Tout n’est évidemment pas possible

Slide 17

Slide 17 text

Le composant HtmlSanitizer ⊚ Assainiser du contenu HTML ⊚ Se protéger contre les failles XSS ⊚ Réfactorisation de tgalopin/html-sanitizer 17

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Pourquoi rapatrier ce projet ? ⊚ Il résout un problème récurrent et répandu ⊚ L’intégration avec les autres composants et symfony/ux ⊚ Pour la marque Symfony et élargir le cercle des mainteneurs 19

Slide 20

Slide 20 text

Le service LocaleSwitcher ⊚ Pouvoir changer la locale de l’application instantanément partout ⊚ Tous les services taggués avec kernel.locale_aware sont concernés (en interne : les Translators & AsciiSlugger par exemple) 20

Slide 21

Slide 21 text

Exemple d’Enums 21

Slide 22

Slide 22 text

Les Enums 22 ⊚ Déjà bien supportés depuis Symfony 5.4 / 6.0 (composants Form & Serializer notamment) ⊚ Nouveauté : EnumRequirement qui permet de générer les requirements d’une Route à partir d’une \BackedEnum

Slide 23

Slide 23 text

BackedEnumValueResolver 23

Slide 24

Slide 24 text

D’autres nouveaux ArgValueResolver ⊚ Pour les AbstractUid de symfony/uid ⊚ Pour les \DateTime ⊚ Migration en cours : ParamConverter vers des ArgumentValueResolver 24

Slide 25

Slide 25 text

Bundles plus faciles ⊚ Structure actuelle éprouvée mais verbeuse à implémenter ⊚ Moins de conventions et de boilerplate désormais ⊚ Important pour la DX ! 25

Slide 26

Slide 26 text

Serializer ⊚ Les context builder : une fluent interface à la place d’un simple array ⊚ Nouveau data collector et panel dans le profiler pour traquer quels normalizer / encoder et decoder / denormalizer sont utilisés 26

Slide 27

Slide 27 text

Dependency Injection & attributes ⊚ #[AsDecorator] Class : déclare que le service en décore un autre ⊚ #[MapDecorated] Param : injecte le service décoré ⊚ #[Autowire] Param : pour configurer l’autowiring au plus proche du code mais attention ! 27

Slide 28

Slide 28 text

Plus d’intégrations pour Notifier ⊚ Composant qui abstrait l’envoi de “messages” (emails, SMS, Slack, etc.) ⊚ Le nombre d’intégrations disponibles continue de croître à chaque version ! 28

Slide 29

Slide 29 text

Et tellement d’autres nouveautés ! ⊚ TagAwareAdapter (Cache) grandement amélioré ⊚ Des opérateurs et syntaxes supplémentaires dans le composant ExpressionLanguage ⊚ Utiliser un service directement dans la condition d’une Route 29

Slide 30

Slide 30 text

PHP 8.2 ⊚ Supporter syntaxiquement une nouvelle version de PHP est un bug fix ⊚ Toutes les versions maintenues supporteront PHP 8.2 ⊚ Supporter une nouvelle feature PHP est une nouvelle feature pour Symfony (autant que possible) 30

Slide 31

Slide 31 text

Exemple : propriétés dynamiques 31

Slide 32

Slide 32 text

Déjà compatible avec PHP 8.2 32

Slide 33

Slide 33 text

La puissance de la CI et des tests ⊚ ~ 40 000 tests unitaires et fonctionnels ⊚ Sur toutes les versions de PHP supportées et à venir ⊚ Permet de détecter et de fixer dès maintenant les dépréciations de PHP 8.2 33

Slide 34

Slide 34 text

Symfony 6.2 ⊚ Déjà des dizaines de pull requests sur le milestone ⊚ Tout ce qui n’est pas prêt pour la version 6.1 est décalé automatiquement à la version 6.2 ⊚ Venez participer dès maintenant ! 34

Slide 35

Slide 35 text

Comment aider Symfony ? ⊚ Testez les releases beta et RC sur vos applications ⊚ Reportez les problèmes rencontrés toujours avec un script ou un projet minimaliste les reproduisant ⊚ Programme de sponsoring 35

Slide 36

Slide 36 text

36 Merci ! Des questions ? ⊚ @fancyweb_ sur Twitter ⊚ fancyweb sur GitHub et sur le Slack Symfony