PHP est, depuis plusieurs années maintenant, un des langages Web les plus employés, tant sur le marché des particuliers que sur celui des entreprises. Malgré plusieurs tentatives de mutualisation de code (PEAR [1], etc.), aucune initiative n’a su s’imposer de manière durable comme LE framework incontournable pour la création rapide d’applications extensibles, fiables et performantes. Les années 2005 et 2006 ont vu fleurir nombre de frameworks MVC [2], souvent inspirés de la mode lancée par Ruby On Rails (Ruby) ou encore Django (Python). Les caractéristiques communes à ces nouveaux outils répondent à de nouveaux enjeux : respect de MVC, scaffolding [3], prise en compte de problématiques de déploiement, aides à la mise en œuvre d’Ajax, etc.
Attentive à l’apparition de cette nouvelle génération d’outils PHP, Clever Age a peu à peu développé une expertise dans leur utilisation au service des projets client. Cependant, si les commentaires enthousiastes se succèdent au sujet de Symfony, Cake PHP, ou du Zend Framework, le développement de projets Web autour d’un framework demeure encore assez rare. Plusieurs raisons peuvent expliquer cette frilosité du marché face à ces nouveaux outils, qui pourtant accélèrent grandement le temps de développement des projets Web et leur permettent d’atteindre de nouveaux standards de qualité et des objectifs plus élevés qu’auparavant.
Tout d’abord, la mode des frameworks et l’intérêt pour la capitalisation des efforts de développement sont encore assez récents. Auparavant, développer from scratch une plateforme Web autour du couple PHP/MySQL nécessitait un effort important pour l’assemblage de briques logicielles disparates, et la qualité des projets Web issus de développements spécifiques s’en ressentait bien souvent. Peu à peu, c’est donc l’adaptation de CMS [4] aux besoins des projets qui a pris le pas sur les développements spécifiques. Or, cette stratégie de l’extension du CMS est en train de trouver sa principale limitation : la difficulté à intégrer une logique métier dans des outils pas forcément prévus pour cela à la base.
Deuxième point intéressant, la sphère logicielle PHP peine encore à dégager une solution unique, facilement identifiable, et reconnue, ce que la langage Ruby a su faire avec Ruby on Rails et, dans une moindre mesure, Python avec Django. Symfony est pour l’heure le framework PHP qui nous semble le plus abouti, surtout avec les avancées prévues pour la version 1.0 du projet français. Ceci dit, nous trouvons intéressant de rester critiques face à l’engouement généralisé que suscite Symfony, aussi nous avons établi une liste qui reprend nos principales interrogations et doutes sur les choix effectués :
Il existe de (trop) nombreuses solutions de persistance de base de données pour PHP. Les développeurs de Symfony ont fait le choix d’utiliser Propel au sein du framework et l’ont remarquablement bien intégré :
Cependant, Propel souffre de quelques problèmes :
Face à ces problèmes, les développeurs de Symfony et la communauté ont décidé de permettre l’utilisation d’autres moteurs de persistance : Propel a été retiré du cœur de Symfony et mis à disposition sous la forme d’une extension et le travail d’intégration de Doctrine à commencé.
Doctrine présente des avantages certains :
Pourtant l’utilisation de Doctrine dans le cadre de projets professionels nous semble pour le moment prématurée :
Quelle solution choisir [6] ? En attendant la maturation de Doctrine, il reste plus prudent de continuer à utiliser Propel, dont la version 1.3, basée sur PDO devrait résoudre le problème des performances.
De tous les frameworks d’application web que nous avons pu tester, Symfony est celui qui offre le support de l’internationalisation et de la localisation le plus abouti. Quelques problèmes subsistent cependant :
Un dernier effort sur ce point [7] fera de Symfony le framework de référence pour les développements mettant en jeu des problématiques d’internationalisation.
$this->getContext()->getI18n()->__('Chaine à traduire'). Un appel statique du style sfI18N::__('Chaine à traduire') ou, dans le pire des cas, $this->getI18n()->__('Chaine à traduire'), serait sans doute moins pesant à employer.Clairement, ce ne sont pas là des points qui remettent en cause notre intérêt pour le projet Symfony, récemment adopté par Yahoo ! pour la refonte de Yahoo ! Bookmarks. Notre objectif n’est pas de faire la critique absolue de Symfony, mais bien plutôt de mettre le doigt "là où ça fait mal", afin de contribuer à l’amélioration de ce formidable outil qui arrive très bientôt en 1.0 ! Et vérifier un vieil adage, par la même occasion : "qui aime bien châtie bien" !
[1] PEAR n’est pas un framework en soi ; il serait plus juste de parler de framework technique.
[2] MVC ou Modèle Vue Contrôleur.
[3] Le scaffolding (“échafaudage”, en français) est la structure de base permettant d’effectuer des opérations de type CRUD (Create, Retrieve, Update et Delete) sur une table de données. Pour plus d’informations, voir le chapitre de la documentation de Symfony consacré au scaffolding.
[4] Content Management System, ou Système de Gestion de Contenus
[5] cf. http://en.wikipedia.org/wiki/Object-relational_mapping.
[6] Une discussion sur ce sujet, avec les développeurs de Symfony et celui du plugin Doctrine a eu lieu récemment : http://groups.google.com/group/symfony-fr/browse_thread/thread/ac3c0137f1942a99/.
[7] Un travail communautaire a déjà commencé : http://www.symfony-project.com/trac/wiki/HowToGenerateI18NFiles.
[8] "YAML Ain’t Markup Language", ou YAML, est un format de représentation des données très facilement utilisable par les machines. Les fichiers YAML portent généralement l’extension *.yml. Plus d’informations sur le site officiel du format YAML.
Merci pour cette analyse intéressante. A la différence de Franz Shubert, qui est mort à 31 ans, symfony n’est encore qu’un prématuré et sa version 1.0 devrait combler pas mal des lacunes listées ici.
Quant à la documentation en français et à une démarche plus concertée, je propose de la lancer ici et maintenant. Messieurs de CleverAge, plutôt que de prendre des pauses café, traduisez la doc de symfony !
Blague à part, la documentation est un peu en sommeil pour l’instant, mais pour une bonne raison : nous travaillons à la rédaction du livre symfony, dont la traduction (qui représentera un intérêt financier évident pour des éditeurs français) sera bien plus facile.
Au plaisir de vous rencontrer d’ici peu !
Il y a aussi le framework Jelix
il ne prétend pas tout résoudre, il lui manque encore des trucs, mais son objectif premier est la performance à tous les niveaux et il semble combler quelques unes des lacunes que vous citez. D’ailleurs il a été choisi par une grosse plateforme de blog pour sa prochaine version (et les perfs sont au rendez vous semble-t-il). http://jelix.org
À noter que Doctrine reste tout de même assez lourd. Il n’y a qu’à regarder la cascade des fonctions appelées dés que l’on déclare un champs. Et ceci est executé à chaque appel d’une page. Ces nouveaux trucs à la activeRecord sont peut être sexy pour le développeur, mais ça reste des usines à gaz en environnement de production... Jelix a choisi une autre voie avec jDao (empruntée à Copix).
@françois : nous pourrons en effet discuter de tout ce la de vive voix 
@laurent : si j’ai bien compris ce que tu dis là, et ce que je lis ici les jDAO fonctionnent comme Propel ?
Symfony proposera donc un ORM "ActiveRecord like" et un ORM à base de code autogénéré. Que demande le peuple ?
Et étrangement, c’est l’ORM basé sur active record qui semble être le plus performant.
Sur quelle couche d’abstraction s’appuient les jDAO ?
Bonjour, Tout d’abord j’aime beaucoup symfony, je l’utilise au travail sur environnement win32 et a la maison sur macos X. Premierement, je me demandais si le projet continuai car contrairement a prado ou jelix, les dernieres news de symfony remonte un peu, donc c’etait pour savoir ce qu’il en est, et quid de la v1.0 un cadeau de noel ? Deuxiemement, j’ai decouvert le yml et ai apprécié cette facilité de construction de la base de donnée ainsi que la creation des objets avec getter et setter, en plus c’est bien lisible le yml pour un schema de donnée.
J’espere que symfony va continuer sur cette voie, car il est bien partie 
Mika,
Symfony et bel et bien actif, il suffit de jeter un oeil à la timeline 
(sans vouloir troller, hormis les forums, je ne vois aucune source de news pour Jelix et Prado ?)
En ce qui concerne la 1.0 elle est vraiment en bonne voie et les différentes étapes nécessaires à la sortie d’une version stable d’un produit sont en train d’être mises en place.
Je pense que dans un avenir proche on aura même de la visibilité sur une deadline approximative.
Je ne parlais pas de source news mais de news tout court : la derniere de prado date du 26 octobre, alors que la derniere date du 25 aout...
Je viens de voir la presence d’une timeline qui indique un dernier changement au 6 novembre
note : symfony est un projet francais, hors tout le site est en anglais, why ? a part quelques traductions de tutoriel ou d’aide...
En tout cas je suis bien content que le projet continue
Si vous avez besoin d’aide, je veux bien participer 
Mika,
la dernière version stable de symfony est en effet assez ancienne.
En ce qui concerne la traduction de la documentation, c’est un problème que nous soulevons dans l’article. Reporte-toi au commentaire de François (plus haut) pour un élément de réponse.
Peut-être pourras-tu aider à traduire la documentation lorsqu’un mouvement sera lancé dans ce but 
Vachement sévères les gars. En ce qui concerne la doc, j’ai rarement eu l’occasion d’avoir une doc aussi fournie en exemple. Tout y est expliqué ou presque. J’adore et j’adopte en ce qui me concerne.
Si vous savez pas lire l’anglais, il serait temps de vous y mettre car faut être peu soucieux de l’évolution de vos application que pour encore penser même programmer en français !!
Apprenez dont l’anglais, çà coutera moins chère à tout le monde 
Question performances, il est certain que c’est une bien grosse armada pour un carte de visite mais qu’est-ce qu’elle aide pour un projet de gestion. Le découplage à la mode struts et spring des jsp est ecellent. l’orm généré par propel s’avère fonctionnel. les outils de générations sont pensés dans tous les sens, on ne fait plus qu’une fois le travail sur les données, que ce soit au niveau schéma, bd ou sql.
Je ne crois pas aller contre votre avis à ce sujet 
cependant, je trouve çà fort de se plaindre d’une doc anglaise...
Blaise,
Nous avons essayé d’émettre nos critiques de la manière la plus prudente possible, car nous utilisons Symfony au quotidien et trouvons qu’il s’agit d’un excellent framework.
Concernant notre remarque au sujet de l’absence de traduction de la documentation, elle est l’écho de certaines remarques parues sur la mailing-list francophone de Symfony. Depuis novembre dernier, nous avons lancé un effort de traduction de la documentation en français car, même si nous savons parler anglais et sommes parfaitement à l’aise avec une documentation anglaise, nous estimons que ce serait dommage de priver des développeurs francophones de ce beau framework. C’est le moins que nous puissions faire pour contribuer au développement de Symfony.
Du reste, la documentation de Symfony est effectivement de qualité exemplaire, comme nous l’indiquons dans notre article 
amicalement,
xavier
Le titre de votre article peut faire penser que vous décriez symfony, mais en le lisant on vois que vous etes comme nous : vous aimez symfony et vous voulez qu’il soit le meilleur. J’utilise la version 1 du framework en mode sandbox depuis la mi-janvier et je doit reconnaitre que symfony fait fort. J’ai suivi les tutoriaux en anglais, mais c’est vrai que parfois des explications en fraçais seraient mieux...
Bon article !