quid de vos applications symfony 1

47
Quid de symfony 1 ? Symfony live 2011 - Paris Marc Hugon

Upload: marchugon

Post on 15-Jul-2015

4.356 views

Category:

Technology


0 download

TRANSCRIPT

Quid de symfony 1 ?

Symfony live 2011 - Paris

Marc Hugon

Petite introduction

• Marc Hugon

– Directeur technique chez Sensio

– Développeur Symfony dès les toutes

premières versions (0.4 voire moins)

– 15 ans de pratique du web

Symfony2 arrive

• La RC1 n’est toujours pas disponible, mais le cœur est « stable »

• Il y a déjà un grand nombre d’earlyadopters– http://symfony2bundles.org/ et ses dizaines

de projets, plus de 150 bundles

• Et quand on voit l’activité qui entoure Symfony2, on se dit que…

Mais il y a un autre point de vue

• Le nombre de projets existant en

Symfony1.x est assez conséquent

• Il est donc toujours utile et nécessaire

de travailler sur ces projets

• Dans ce contexte, le point de vue

semble un peu différent…

La fin du monde

• Image TODO

http://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 Symfony1

• Première apparition publique

en octobre 2005 (0.4)

• Février 2007 : symfony 1.0

• Juin 2008 : symfony 1.1 (avec

upgrade)

• Novembre 2008 : symfony 1.2

(avec upgrade)

2005

2008

Rappel Timeline Symfony1

• Décembre 2009 : symfony 1.3 (avec upgrade)

• Décembre 2009 : symfony 1.4

• Janvier 2010 : fin du support symfony 1.0

• D’ici peu : fin du support symfony 1.3

• Décembre 2012 : fin du support 1.4

2009

2012

Et pendant ce temps-là…

• En octobre 2005 (0.4), PHP était

en version 5.0.5

• En février 2007 : version 5.2.1

• Juin 2008 : version 5.2.6

• Novembre 2008 : version 5.2.6

• Décembre 2009 : version 5.3.1

• Mars 2011 : version 5.3.5

2005

2011

Assurer la compatibilité c’est bien

• Permettre de monter de version de

Symfony en conservant ce qu’on avait

déjà fait auparavant

• Mettre à jour son serveur (PHP) avec

des applications qui continuent à

fonctionner

Mais ça a un prix

• Impossible de profiter des évolutions

du langage si on veut assurer la rétro

compatibilité

Si on résume

• 7 ans de maintenance et de

compatibilité PHP pour Symfony 1.x

Pas mal non ?

Alors maintenant, on fait quoi ?

On ne se limite pas

• Fabien Potencier en mode R&D sur

Symfony2

– Jour 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 donc

• Symfony2 n’assure pas la rétro

compatibilité avec Symfony1

Pas d’upgrade

Non

Pas d’upgrade

Mais pourquoi ?

• Assurance que Symfony2 a été réalisé

pour profiter au maximum de PHP 5.3

• D’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 semble

• Mais est-il quand même possible de

migrer une application Symfony1.x en

Symfony2?

Dans un monde idéal

• L’application source est testée unitairement et fonctionnellement

• Les tests sont migrés dans l’application Symfony2

• Les plugins de l’application source sont traduits en bundle Symfony2

• Ce qui n’était pas un plugin est porté en bundle Symfony2

• Tout marche !

Parlons des tests

• Symfony1.x : Lime

• Symfony2 : PHPUnit

Migration des tests unitaires

• Pour les plus courageux :– Créer une surcharge de Lime qui transforme

ces appels en version PHPUnit

• Sinon

• Modifier vos tests manuellement pour les écrire en PHPUnit dans votre application Symfony1. Ils sont prêts pour Symfony2

Migration des tests fonctionnels

• Jusqu’à 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és

• Avec 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êts

• Prochaine étape que nous vous

proposons de faire

• Rajouter 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 performances

• En fait, ça vous permet même très rapidement de gagner en performances !

• Le cache HTTP devient en effet disponible !

L’ORM : le cas doctrine

• Symfony2 coïncide avec la mise à disposition de Doctrine2

• Il est donc assez naturel de vouloir faire cette migration

• Mon conseil : attendez d’avoir fait le reste ! Utilisez Doctrine1 pour le moment

Doctrine1 et Symfony2 ?

• Et oui

• Vous pouvez utiliser un loader

spécifique qui vous permettra de

retrouver un auto loading compatible

avec l’existant Symfony1

(MapFileClassLoader)

ORM : Propel

• Ne nécessite pas de changement

majeur, c’est le même Propel

• https://github.com/willdurand/PropelB

undle

Transformation plugin -> bundle

• L’arborescence cible la suivante (non exhaustif) :– BundleName

• Command

• Controller

• Entity

• Form

• Resources– Views

• Tests

Command

• Exécution de tâche disponibles dans

la console symfony2

• Equivalent par exemple de lib/task

dans vos plugins

• Portage assez peu complexe, porte

principalement sur les entrées / sorties

Controller

• Tous les contrôleurs sont regroupés dans un seul répertoire

• Dans Symfony1 ils se trouvent dans chaque module de votre plugin

• Comme 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)

Entity

• C’est le lib/model de vos plugins

actuel

• Pas d’autres changements à apporter

mis à part la problématique de

l’ORM…

Form

• Le 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

Views

• Twig préconisé dans Symfony2, mais

PHP est aussi supporté

• Sauf que…

• Partial, Component, Slot =>

Include, Slot

Helpers

• Conceptuellement, toujours présents

• Pratiquement, plutôt absents

• Mais ça ne représente que quelques

lignes de code à chaque

fois, migration assez simple

Un petit détail

• Le routing Symfony2

• En twig :

<a href="{{ path("blog_archives" }}">Archives</a>

Admin generator

• Hum….

• On vous a dit qu’il fallait être patient ;)

L’activation de votre bundle

• Quand vous vous êtes sorti des embuches précédentes

• Pour chaque bundle créé, vous indiquez la route correspondante dans Symfony2 et vous y êtes, Symfony2 a pris la main

• Au suivant, sauf que…

Tout ne dépend pas toujours de vous

• Si 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 à jour

• Un exemple ? sfGuard and co

Pour résumer

• Migration = Réécriture

• Heureusement, elle peut être progressive

• Dans 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écifique

– Nombre d’applications

– Maintenance et évolutions

– Possibilité de découper les applicatifs et

de les isoler

– Environnement technique

– Roadmap

On peut la préparer

• Utiliser les namespace

• Utiliser PHPUnit et abandonner lime pour les tests fonctionnels

• Utiliser le cache HTTP de Symfony2

• Utiliser des composants de Symfony2

• Bref, commencer à réécrire vos applications pour quitter petit à petit Symfony1

Un truc

• Plus vos applications sont découplées

• Plus vous respectez les bonnes

pratiques

• Plus facilement vous pourrez travailler

pas à pas sur votre migration

Mais n’oubliez pas

• Symfony1 fonctionne

• Symfony1 est rapide

• Symfony1 est maintenu

• Symfony2 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 aider

• Sensiolabs propose :– Une extension du support symfony1

– Un accompagnement sur mesure sur votre chemin vers Symfony2• Formations

• Conseil

• Architecture

• Développement

• http://www.sensiolabs.com

Merci

• Des questions ?