Quid de symfony 1 ?Marc HugonSymfony live 2011 - Paris
Petite introductionMarc HugonDirecteur technique chez SensioDéveloppeur Symfony dès les toutes premières versions (0.4 voire moins)15 ans de pratique du web
Symfony2 arriveLa RC1 n’est toujours pas disponible, mais le cœur est « stable »Il y a déjà un grand nombre d’earlyadoptershttp://symfony2bundles.org/ et ses dizaines de projets, plus de 150 bundlesEt quand on voit l’activité qui entoure Symfony2, on se dit que…
YoupiImage TODOhttp://www.flickr.com/photos/reservasdecoches/3126393248/
Mais il y a un autre point de vueLe nombre de projets existant en Symfony1.x est assez conséquentIl est donc toujours utile et nécessaire de travailler sur ces projetsDans ce contexte, le point de vue semble un peu différent…
La fin du mondeImage TODOhttp://www.flickr.com/photos/cameracapers/1245066035/
Quid de symfony 1 ?Ne changez rien !Continuez à faire du symfony 1.x !Commencez vos nouveaux projets en symfony2 si ceux-ci sont indépendants de l’existant 1.x
Des questions ?Comment ça, ça a été rapide ?
Rappel Timeline Symfony1Première apparition publique en octobre 2005 (0.4)Février 2007 : symfony 1.0Juin 2008 : symfony 1.1 (avec upgrade)Novembre 2008 : symfony 1.2 (avec upgrade)20052008
Rappel Timeline Symfony1Décembre 2009 : symfony 1.3 (avec upgrade)Décembre 2009 : symfony 1.4Janvier 2010 : fin du support symfony 1.0D’ici peu : fin du support symfony 1.3Décembre 2012 : fin du support 1.420092012
Et pendant ce temps-là…En octobre 2005 (0.4), PHP était en version 5.0.5En février 2007 : version 5.2.1Juin 2008 : version 5.2.6Novembre 2008 : version 5.2.6Décembre 2009 : version 5.3.1Mars 2011 : version 5.3.520052011
Assurer la compatibilité c’est bienPermettre de monter de version de Symfony en conservant ce qu’on avait déjà fait auparavantMettre à jour son serveur (PHP) avec des applications qui continuent à fonctionner
Mais ça a un prixImpossible de profiter des évolutions du langage si on veut assurer la rétro compatibilité
Si on résume7 ans de maintenance et de compatibilité PHP pour Symfony 1.xPas mal non ?Alors maintenant, on fait quoi ?
On ne se limite pasFabien Potencier en mode R&D sur Symfony2Jour J« le routing, je vais le conserver, ce qui avait été fait sur la version 1 était pas si mal que ça »Jour J+x« finalement j’ai eu de nouvelles idées, j’ai vu des choses intéressantes là, ici, et là, j’ai tout réécrit, c’est beaucoup mieux car… »
Et doncSymfony2 n’assure pas la rétro compatibilité avec Symfony1Pas d’upgradeNonPas d’upgrade
Mais pourquoi ?Assurance que Symfony2 a été réalisé pour profiter au maximum de PHP 5.3D’ailleurs Symfony2 nécessite PHP5.3.2 au minimum
Donc il n’y pas d’upgrade ?Hum…Je l’ai déjà dit il me sembleMais est-il quand même possible de migrer une application Symfony1.x en Symfony2?
Dans un monde idéalL’application source est testée unitairement et fonctionnellementLes tests sont migrés dans l’application Symfony2Les plugins de l’application source sont traduits en bundle Symfony2Ce qui n’était pas un plugin est porté en bundle Symfony2Tout marche !
Parlons des testsSymfony1.x : LimeSymfony2 : PHPUnit
Migration des tests unitairesPour les plus courageux :Créer une surcharge de Lime qui transforme ces appels en version PHPUnitSinonModifier vos tests manuellement pour les écrire en PHPUnit dans votre application Symfony1. Ils sont prêts pour Symfony2
Migration des tests fonctionnelsJusqu’à un certain point, les tests fonctionnels écrit en Symfony1 peuvent être réutilisés.Les problèmes commencent quand on interagit dans le cœur de l’applications sur des tests fonctionnels (appel à Doctrine par exemple)
Autres outils recommandésAvec un outil tel que Selenium (voire cubictest), vous faites du vrai test fonctionnel, et c’est compatible tout framework (http://cubictest.seleniumhq.org/)
Ok, mes tests sont prêtsProchaine étape que nous vous proposons de faireRajouter une surcouche Symfony2 sur l’existant Symfony 1 (voir la présentation « nice performance using Sf2 cache wrapping Sf1 application » pour la façon de le faire)
Mais, et mes perfs ?La surcharge est très légère en terme de performancesEn fait, ça vous permet même très rapidement de gagner en performances !Le cache HTTP devient en effet disponible !
L’ORM : le cas doctrineSymfony2 coïncide avec la mise à disposition de Doctrine2Il est donc assez naturel de vouloir faire cette migrationMon conseil : attendez d’avoir fait le reste ! Utilisez Doctrine1 pour le moment
Doctrine1 et Symfony2 ?Et ouiVous pouvez utiliser un loader spécifique qui vous permettra de retrouver un auto loading compatible avec l’existant Symfony1 (MapFileClassLoader)
ORM : PropelNe nécessite pas de changement majeur, c’est le même Propelhttps://github.com/willdurand/PropelBundle
Transformation plugin -> bundleL’arborescence cible la suivante (non exhaustif) :BundleNameCommandControllerEntityFormResourcesViewsTests
CommandExécution de tâche disponibles dans la console symfony2Equivalent par exemple de lib/task dans vos pluginsPortage assez peu complexe, porte principalement sur les entrées / sorties
ControllerTous les contrôleurs sont regroupés dans un seul répertoireDans Symfony1 ils se trouvent dans chaque module de votre pluginComme vos contrôleurs ne contiennent pas plus de 5 lignes de code par action, la migration est simple (comme quoi une bonne pratique, ça peut servir)
EntityC’est le lib/model de vos plugins actuelPas d’autres changements à apporter mis à part la problématique de l’ORM…
FormLe framework dédié présent dans les dernières versions de la branche 1 a été abandonné (qui n’a pas souffert sur les formulaires imbriqués ?)Symfony2 propose un nouveau framework dédiéPas vraiment de migration possible, c’est plus un travail de réécriture
ViewsTwig préconisé dans Symfony2, mais PHP est aussi supportéSauf que…Partial, Component, Slot => Include, Slot
HelpersConceptuellement, toujours présentsPratiquement, plutôt absentsMais ça ne représente que quelques lignes de code à chaque fois, migration assez simple
Un petit détailLe routing Symfony2En twig :<a href="{{ path("blog_archives" }}">Archives</a>
AdmingeneratorHum….On vous a dit qu’il fallait être patient ;)
L’activation de votre bundleQuand vous vous êtes sorti des embuches précédentesPour chaque bundle créé, vous indiquez la route correspondante dans Symfony2 et vous y êtes, Symfony2 a pris la mainAu suivant, sauf que…
Tout ne dépend pas toujours de vousSi votre projet dépend de plugins symfony1 faits par des tiers, vous risquez de ne pas avoir de mise à jour, ou d’avoir une refonte plutôt qu’une mise à jourUn exemple ? sfGuard and co
Pour résumerMigration = RéécritureHeureusement, elle peut être progressiveDans la plupart des cas, vous pouvez utiliser les composants Symfony1 dans votre applicatif Symfony2 (pour les formulaires par exemple)
Comment faire une transition ?Chaque cas est spécifiqueNombre d’applicationsMaintenance et évolutionsPossibilité de découper les applicatifs et de les isolerEnvironnement techniqueRoadmap
On peut la préparerUtiliser les namespaceUtiliser PHPUnit et abandonner lime pour les tests fonctionnelsUtiliser le cache HTTP de Symfony2Utiliser des composants de Symfony2Bref, commencer à réécrire vos applications pour quitter petit à petit Symfony1
Un trucPlus vos applications sont découpléesPlus vous respectez les bonnes pratiquesPlus facilement vous pourrez travailler pas à pas sur votre migration
Mais n’oubliez pasSymfony1 fonctionneSymfony1 est rapideSymfony1 est maintenuSymfony2 n’est pas encore RC1
Quid de symfony1 ?Ne changez rien !Continuez à faire du symfony 1.x !Commencez vos nouveaux projets en symfony2 si ceux-ci sont indépendants de l’existant 1.x
Et on peut vous aiderSensiolabs propose :Une extension du support symfony1Un accompagnement sur mesure sur votre chemin vers Symfony2FormationsConseilArchitectureDéveloppementhttp://www.sensiolabs.com
MerciDes questions ?

Quid de vos applications symfony 1

  • 1.
    Quid de symfony1 ?Marc HugonSymfony live 2011 - Paris
  • 2.
    Petite introductionMarc HugonDirecteurtechnique chez SensioDéveloppeur Symfony dès les toutes premières versions (0.4 voire moins)15 ans de pratique du web
  • 3.
    Symfony2 arriveLa RC1n’est toujours pas disponible, mais le cœur est « stable »Il y a déjà un grand nombre d’earlyadoptershttp://symfony2bundles.org/ et ses dizaines de projets, plus de 150 bundlesEt quand on voit l’activité qui entoure Symfony2, on se dit que…
  • 4.
  • 5.
    Mais il ya un autre point de vueLe nombre de projets existant en Symfony1.x est assez conséquentIl est donc toujours utile et nécessaire de travailler sur ces projetsDans ce contexte, le point de vue semble un peu différent…
  • 6.
    La fin dumondeImage TODOhttp://www.flickr.com/photos/cameracapers/1245066035/
  • 7.
    Quid de symfony1 ?Ne changez rien !Continuez à faire du symfony 1.x !Commencez vos nouveaux projets en symfony2 si ceux-ci sont indépendants de l’existant 1.x
  • 8.
    Des questions ?Commentça, ça a été rapide ?
  • 9.
    Rappel Timeline Symfony1Premièreapparition publique en octobre 2005 (0.4)Février 2007 : symfony 1.0Juin 2008 : symfony 1.1 (avec upgrade)Novembre 2008 : symfony 1.2 (avec upgrade)20052008
  • 10.
    Rappel Timeline Symfony1Décembre2009 : symfony 1.3 (avec upgrade)Décembre 2009 : symfony 1.4Janvier 2010 : fin du support symfony 1.0D’ici peu : fin du support symfony 1.3Décembre 2012 : fin du support 1.420092012
  • 11.
    Et pendant cetemps-là…En octobre 2005 (0.4), PHP était en version 5.0.5En février 2007 : version 5.2.1Juin 2008 : version 5.2.6Novembre 2008 : version 5.2.6Décembre 2009 : version 5.3.1Mars 2011 : version 5.3.520052011
  • 12.
    Assurer la compatibilitéc’est bienPermettre de monter de version de Symfony en conservant ce qu’on avait déjà fait auparavantMettre à jour son serveur (PHP) avec des applications qui continuent à fonctionner
  • 13.
    Mais ça aun prixImpossible de profiter des évolutions du langage si on veut assurer la rétro compatibilité
  • 14.
    Si on résume7ans de maintenance et de compatibilité PHP pour Symfony 1.xPas mal non ?Alors maintenant, on fait quoi ?
  • 15.
    On ne selimite pasFabien Potencier en mode R&D sur Symfony2Jour J« le routing, je vais le conserver, ce qui avait été fait sur la version 1 était pas si mal que ça »Jour J+x« finalement j’ai eu de nouvelles idées, j’ai vu des choses intéressantes là, ici, et là, j’ai tout réécrit, c’est beaucoup mieux car… »
  • 16.
    Et doncSymfony2 n’assurepas la rétro compatibilité avec Symfony1Pas d’upgradeNonPas d’upgrade
  • 17.
    Mais pourquoi ?Assuranceque Symfony2 a été réalisé pour profiter au maximum de PHP 5.3D’ailleurs Symfony2 nécessite PHP5.3.2 au minimum
  • 18.
    Donc il n’ypas d’upgrade ?Hum…Je l’ai déjà dit il me sembleMais est-il quand même possible de migrer une application Symfony1.x en Symfony2?
  • 19.
    Dans un mondeidéalL’application source est testée unitairement et fonctionnellementLes tests sont migrés dans l’application Symfony2Les plugins de l’application source sont traduits en bundle Symfony2Ce qui n’était pas un plugin est porté en bundle Symfony2Tout marche !
  • 20.
    Parlons des testsSymfony1.x: LimeSymfony2 : PHPUnit
  • 21.
    Migration des testsunitairesPour les plus courageux :Créer une surcharge de Lime qui transforme ces appels en version PHPUnitSinonModifier vos tests manuellement pour les écrire en PHPUnit dans votre application Symfony1. Ils sont prêts pour Symfony2
  • 22.
    Migration des testsfonctionnelsJusqu’à un certain point, les tests fonctionnels écrit en Symfony1 peuvent être réutilisés.Les problèmes commencent quand on interagit dans le cœur de l’applications sur des tests fonctionnels (appel à Doctrine par exemple)
  • 23.
    Autres outils recommandésAvecun outil tel que Selenium (voire cubictest), vous faites du vrai test fonctionnel, et c’est compatible tout framework (http://cubictest.seleniumhq.org/)
  • 24.
    Ok, mes testssont prêtsProchaine étape que nous vous proposons de faireRajouter une surcouche Symfony2 sur l’existant Symfony 1 (voir la présentation « nice performance using Sf2 cache wrapping Sf1 application » pour la façon de le faire)
  • 25.
    Mais, et mesperfs ?La surcharge est très légère en terme de performancesEn fait, ça vous permet même très rapidement de gagner en performances !Le cache HTTP devient en effet disponible !
  • 26.
    L’ORM : lecas doctrineSymfony2 coïncide avec la mise à disposition de Doctrine2Il est donc assez naturel de vouloir faire cette migrationMon conseil : attendez d’avoir fait le reste ! Utilisez Doctrine1 pour le moment
  • 27.
    Doctrine1 et Symfony2?Et ouiVous pouvez utiliser un loader spécifique qui vous permettra de retrouver un auto loading compatible avec l’existant Symfony1 (MapFileClassLoader)
  • 28.
    ORM : PropelNenécessite pas de changement majeur, c’est le même Propelhttps://github.com/willdurand/PropelBundle
  • 29.
    Transformation plugin ->bundleL’arborescence cible la suivante (non exhaustif) :BundleNameCommandControllerEntityFormResourcesViewsTests
  • 30.
    CommandExécution de tâchedisponibles dans la console symfony2Equivalent par exemple de lib/task dans vos pluginsPortage assez peu complexe, porte principalement sur les entrées / sorties
  • 31.
    ControllerTous les contrôleurssont regroupés dans un seul répertoireDans Symfony1 ils se trouvent dans chaque module de votre pluginComme vos contrôleurs ne contiennent pas plus de 5 lignes de code par action, la migration est simple (comme quoi une bonne pratique, ça peut servir)
  • 32.
    EntityC’est le lib/modelde vos plugins actuelPas d’autres changements à apporter mis à part la problématique de l’ORM…
  • 33.
    FormLe framework dédiéprésent dans les dernières versions de la branche 1 a été abandonné (qui n’a pas souffert sur les formulaires imbriqués ?)Symfony2 propose un nouveau framework dédiéPas vraiment de migration possible, c’est plus un travail de réécriture
  • 34.
    ViewsTwig préconisé dansSymfony2, mais PHP est aussi supportéSauf que…Partial, Component, Slot => Include, Slot
  • 35.
    HelpersConceptuellement, toujours présentsPratiquement,plutôt absentsMais ça ne représente que quelques lignes de code à chaque fois, migration assez simple
  • 36.
    Un petit détailLerouting Symfony2En twig :<a href="{{ path("blog_archives" }}">Archives</a>
  • 37.
    AdmingeneratorHum….On vous adit qu’il fallait être patient ;)
  • 38.
    L’activation de votrebundleQuand vous vous êtes sorti des embuches précédentesPour chaque bundle créé, vous indiquez la route correspondante dans Symfony2 et vous y êtes, Symfony2 a pris la mainAu suivant, sauf que…
  • 39.
    Tout ne dépendpas toujours de vousSi votre projet dépend de plugins symfony1 faits par des tiers, vous risquez de ne pas avoir de mise à jour, ou d’avoir une refonte plutôt qu’une mise à jourUn exemple ? sfGuard and co
  • 40.
    Pour résumerMigration =RéécritureHeureusement, elle peut être progressiveDans la plupart des cas, vous pouvez utiliser les composants Symfony1 dans votre applicatif Symfony2 (pour les formulaires par exemple)
  • 41.
    Comment faire unetransition ?Chaque cas est spécifiqueNombre d’applicationsMaintenance et évolutionsPossibilité de découper les applicatifs et de les isolerEnvironnement techniqueRoadmap
  • 42.
    On peut lapréparerUtiliser les namespaceUtiliser PHPUnit et abandonner lime pour les tests fonctionnelsUtiliser le cache HTTP de Symfony2Utiliser des composants de Symfony2Bref, commencer à réécrire vos applications pour quitter petit à petit Symfony1
  • 43.
    Un trucPlus vosapplications sont découpléesPlus vous respectez les bonnes pratiquesPlus facilement vous pourrez travailler pas à pas sur votre migration
  • 44.
    Mais n’oubliez pasSymfony1fonctionneSymfony1 est rapideSymfony1 est maintenuSymfony2 n’est pas encore RC1
  • 45.
    Quid de symfony1?Ne changez rien !Continuez à faire du symfony 1.x !Commencez vos nouveaux projets en symfony2 si ceux-ci sont indépendants de l’existant 1.x
  • 46.
    Et on peutvous aiderSensiolabs propose :Une extension du support symfony1Un accompagnement sur mesure sur votre chemin vers Symfony2FormationsConseilArchitectureDéveloppementhttp://www.sensiolabs.com
  • 47.