1 of 24

Migrer vers Symfony 4

Par Laïla ATRMOUH �@leiluspocus

2 of 24

  • Site de référence pour trouver le bureau idéal pour votre équipe
  • A connu une refonte en 2017

  • Ecosystème autour du site ♻️
    • CRM
    • Communication avec Algolia
    • Back-office
    • ...

  • 1 Product Owner
  • 4 devs

1 sprint - 80% de story produit, 20% de story tech

‘’ Partagez plus

que des bureaux

B U R E A U X À P A R T A G E R

3 of 24

Les étapes d’une upgrade vers une version majeure

“On prendra une semaine de dev, ça peut se caser dans un sprint !”

B U R E A U X À P A R T A G E R

4 of 24

Injection de dépendances - Commande

Injection du service manuellement dans la configuration YAML

En savoir plus sur le concept de l’injection de dépendances et ses avantages: https://putaindecode.io/articles/injection-de-dependances-en-php/

B U R E A U X À P A R T A G E R

5 of 24

Injection de dépendances - Controller

Tout ça peut se faire dès maintenant sur vos projets Symfony !* 🎉

*Dès Symfony 2.8 je crois ?

B U R E A U X À P A R T A G E R

6 of 24

Tests à ré-adapter

Adapter les mocks au changement

B U R E A U X À P A R T A G E R

7 of 24

Première mise en prod de l’injection de dépendances partout

  • Une centaine de fichiers changés
  • Presque autant de warning corrigés
  • De beaux logs exploitables

On est toujours sur Symfony 3.4

Mise en prod - DI

Février 2019

La PR de release DI

B U R E A U X À P A R T A G E R

8 of 24

Upgrade vers Symfony 4

Démarrage de l’étape 2 de la doc officielle

B U R E A U X À P A R T A G E R

9 of 24

Ré-écriture de bundles

Ces bundles n’étaient plus maintenus ⚰️

… et on ne l’a pas anticipé dans l’estimation 😭☠️

dmishh/settings-bundle

Pour la gestion de settings

On en a fait un petit manager maison

besimple/i18n-routing-bundle

L’internationalisation est désormais native à Symfony !

liuggio/excelbundle

Génération de fichiers Excel basé sur une dépendance dépréciée

composer update

> Package phpoffice/phpexcel is abandoned, you should avoid using it. Use phpoffice/phpspreadsheet instead.

Utilisation de la bibliothèque ellumilel/php-excel-writer

"sensio/distribution-bundle": "^5.0",

Gestion des annotations de routes, géré nativement par symfony/routing

syslogic/doctrine-json-functions

Remplacé par "scienta/doctrine-json-functions"

Classes à renommer

B U R E A U X À P A R T A G E R

10 of 24

Ré-écriture de bundles

Vous allez probablement forcément y passer pour ces deux bundles

besimple/i18n-routing-bundle

L’internationalisation est désormais native à Symfony !

"sensio/distribution-bundle": "^5.0", 🧨

Gestion des annotations de routes, géré nativement par symfony/routing

B U R E A U X À P A R T A G E R

11 of 24

Problèmes avec Behat

behat/mink n’a pas de version stable pour Symfony 4

B U R E A U X À P A R T A G E R

12 of 24

Problèmes avec Behat

Adding lazy loading listeners after construction is not supported

Injection des services dans le constructeur plutôt que via des setter

B U R E A U X À P A R T A G E R

13 of 24

Un peu de ménage

  • Templates déplacés, paths à adapter !
  • Gestion des migrations
  • Classes dépréciées (Translator, Controller)

B U R E A U X À P A R T A G E R

14 of 24

Puis … Vient la MEP !

B U R E A U X À P A R T A G E R

15 of 24

  • Paramètre trusted_proxies: — supprimé
  • Nécessité de changer l’app.php

Source: https://symfony.com/doc/current/deployment/proxies.html

🧯Feux en production 🚒

Connexion OAuth cassée

B U R E A U X À P A R T A G E R

16 of 24

  • Récupération de paramètres impossible
  • Un accès au container qui traînait

🧯Feux en production 🚒

B U R E A U X À P A R T A G E R

17 of 24

Début février

19 février

Mars

Chronologie

Environ deux semaines sur la correction de warnings, l’injection de dépendances

Tests globaux par notre PO

Uniquement l’injection de dépendances

Réécriture de bundles dépréciés, stabilisation

Premier commit sur la DI

Upgrade vers Symfony 4 local

Booking

Mise en production

B U R E A U X À P A R T A G E R

18 of 24

Chronologie

Avril

Juin

15 juillet

Vacances de Laïla 🇯🇵 puis Xavier 🇦🇱�Dépriorisation du projet jusqu’à juin

Merge et conflits 😭

🍾🍾🍾🍾

Edition d’offre �Paiement en ligne�Refonte des environnements�

Mise en production finale !

Reprise du projet

🚨

B U R E A U X À P A R T A G E R

19 of 24

Points positifs

  • On a une application migrable !
  • Plus simple de tester nos controller avec la DI, meilleure couverture de tests
  • Meilleure conscience des classes problématiques de notre code

On fait le bilan (calmement)

Points négatifs

  • Notre clear:cache prend plus de mémoire
  • Nos logs sont illisibles avec les nouveaux warnings (dépréciations liées à Symfony 5)

B U R E A U X À P A R T A G E R

20 of 24

A plusieurs, c’est meilleur !

-

Nous n’avons mis que deux ressources sur le projet (1 PM/1 Dev)�Nous avons traité cette migration comme un “side-project”

Les dépriorisations ont mis ce projet en péril

Les leçons apprises

B U R E A U X À P A R T A G E R

21 of 24

Garde ça simple !

-

Pas besoin d’un bundle Excel qui gère des images quand on veut juste … �générer un csv en format xls �#truestory

Les leçons apprises

B U R E A U X À P A R T A G E R

22 of 24

Merci les tests !

-

Les tests automatisés (phpunit, behat) nous ont aidé à déceler des soucis

Les tests globaux sont pénibles à réaliser�

Next steps: Tests End-to-End (même si c’est douloureux à mettre en place)�

Penser à garder un environnement de test le plus ISO possible avec la prod (OAuth)

Les leçons apprises

B U R E A U X À P A R T A G E R

23 of 24

Pour migrer vers Symfony 4.3, il vous faudra :

  1. Analyser votre composer.json et identifiez les bundles qui ne survivront pas à la migration
  2. Déterminer les ressources nécessaires à la réalisation du projet
  3. Mettre en place l’injection de dépendances
  4. Corriger vos dépréciations
  5. Mettre en production le tout
  6. Mettre à jour Symfony et vos bundles
  7. Réécrire vos bundles obsolètes
  8. Faire le ménage dans vos classes (annotations, classes dépréciées)
  9. Faire vos tests globaux
  10. Migrer, (hotfixer) puis célébrer !

Bref !

S’il n’y avait qu’une slide à retenir ...

B U R E A U X À P A R T A G E R

24 of 24

Psst… on recrute !

Merci !

B U R E A U X À P A R T A G E R