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