Zend 2 vs Symfony 2 : sont-ils comparables ?

22 Oct 2014 8 , , ,

Dans le monde des frameworks PHP, Zend et Symfony sont deux références incontournables. L’un profite de sa gloire passée et tente de suivre le mouvement avec sa version 2, l’autre est à son apogée, avec une version 2 qui rencontre un joli succès.

Depuis 2011 et la sortie de SF 2.0, j’ai eu l’occasion de travailler sur Symfony et Zend en environnement professionnel. C’est ce qui m’incite aujourd’hui à proposer un retour d’expérience visant à comparer les différences entre ces deux frameworks. Alors, Zend et Symfony sont-ils comparables ?

Retour d’expérience Zend 2 vs Symfony 2

Comparables, les frameworks le sont forcément. Encore faut-il trouver des critères de comparaison. Pour ce retour d’expérience, j’ai choisi arbitrairement 6 critères :

  • Architecture
  • Philosophie
  • Simplicité d’apprentissage
  • Documentation
  • Communauté
  • Stabilité

Architectures

Nativement, les deux architectures sont très proches avec un dossier dédié à la configuration, un autre pour les sources applicatives, un autre pour le dossier web public et le répertoires des composants tiers. En passant de l’un à l’autre, on est dans la même structure. De ce coté là, pas de surprise : les approches sont similaires.

Si on rentre un peu plus dans le cœur du sujet, on constate toujours peu d’écart : quand Zend propose des modules, Symfony préfère les bundles ; quand Zend propose un dossier public, Symfony préfère un dossier web. Seul le dossier vendor fait l’unanimité mais, sur le fond, on est dans des architectures similaires.

Les modules / bundles intègrent l’ensemble des fichiers permettant de les rendre « autonomes » : configuration, assets, i18n, entités, services, vues.

Philosophie

Philosophie est probablement un mot un peu pompeux pour définir leur approche. Reste que celle-ci est très proche dans Zend et Symfony : le framework est un conteneur qui permet d’organiser les développements. Point. Pour le reste, les composants ready-to-use sont proposés comme des librairies tierces.

Symfony et Zend se placent comme des chefs d’orchestre servant de guide aux développements et s’appuient sur des composants tiers pour bâtir une application. Symfony a particulièrement réussi cette approche en construisant son framework comme une multitude de composants génériques indépendants. A l’inverse, Zend garde des composants fortement « typés Zend » avec des librairies Zend_Form, Zend_Db, Zend_Cache, etc plutôt que des composants autonomes.

Simplicité d’apprentissage

Dans les 2 cas, on se trouve en face d’un framework complexe qui nécessite un solide bagage en PHP ainsi qu’une bonne dose d’abstraction pour s’y retrouver. J’avais estimé la durée d’apprentissage de Symfony 2 pour atteindre une efficacité maximale à environ 3 mois, mon avis ne change pas pour Zend 2. Ces frameworks en version 2 sont clairement orientés techniques, avec des concepts abstraits poussés  et ne peuvent pas être mis entre toutes les mains.

Documentation

Que serait un framework sans sa documentation ? Pas grand chose et c’est là que les choses se gatent du coté de Zend. Autant en 2011 quand j’ai commencé sur Symfony 2, la documentation était parcellaire et il fallait s’accrocher, autant désormais la documentation Symfony 2 est très bien faite. Complète, détaillée et illustrée d’exemples plutôt pertinents, ce que vous ne trouverez pas sur la doc officielle se trouvera facilement sur le net : articles techniques, blog, retours d’expériences, les sources sont légions.

D’autant plus que Symfony 2 a décidé d’orienter son framework « composant », se placant comme chef d’orchestre des composants plutôt que comme structure rigide. Ainsi, chaque composant est utilisable en standalone ou à l’intérieur de son framework « standard edition ». Du coup, la documentation couvre l’ensemble des usages et s’avère très complète.

Coté Zend, c’est la déception. La documentation Zend 2 est peu clair, on n’y trouve pas grand chose, il y a peu d’exemple, bref c’est en chantier et ça se voit. Malheureusement l’utilisation du framework s’avère complexe sans cette aide précieuse. Dès lors que vous sortez de l’usage simple, accrochez-vous pour développer ce que vous voulez.

Communauté

La différence de qualité entre les 2 documentations s’explique nécessairement par une communauté moins importante coté Zend. Symfony a clairement frappé fort en sortant une version 2 un peu balbutiante mais rencontrant l’adhésion des utilisateurs de PHP. Les défauts du début ont alors rapidement été gommés par une communauté grandissante et hyperactive.
Phagocyté par Symfony, Zend semble peiner à rencontrer la même agitation autours de son framework, ce qui explique sans doute les errements documentaires.

Stabilité

Je me sens forcé de faire un petit laïus sur la stabilité des frameworks car lors de mon expérience Zend 2, j’ai été confronté à quelques bugs et à des comportements plutôt étonnants, principalement sur la gestion des formulaires. Ces bugs rencontrés autant de temps après la sortie du framework m’ont paru étonnant et assez révélateurs d’un framework en manque de maturité. Pourtant sorti il y a 2 ans, ZF2 semble encore en phase de rodage.

A noter que j’avais rencontré des problèmes similaires sur Symfony lors des premiers mois d’utilisation.

Un vainqueur en conclusion ?

Pour moi, il n’y a pas de meilleur framework PHP. Cela étant, on peut sans problème dire que Symfony 2 est plus mature que Zend 2, et que, même si cela reste un framework complexe, son utilisation est facilitée par une très bonne documentation et une communauté importante et active. La similarité entre les deux s’arrête à l’architecture et à la philosophie modulaire.

Le mieux est de vous faire votre opinion et je vous invite donc à télécharger les 2 releases et à tester les frameworks par vous même !

  • Sergio

    Bonjour,
    Je suis pro ZF car c’est avec ce framework que « j’ai commencé » et qui m’a suivi dans ma carrière. Mais j’ai fait mes premiers essais, il y a longtemps, avec Symfony 1.
    Je partage l’avis qu’il n’y a pas de meilleur et que tout est question de besoin et de pratique.
    Ça faisait un bail que je ne m’étais pas intéressé à Symfony et pour des raisons de mise à niveau, je cherche de nouvelles idées, façon de faire, tout ce qui me montrera que je suis dans la classe des dinosaures et qu’il est temps d’une grande extinction pour faire place au renouveau.
    Cet article me permet de me dire que je vais chercher dans l’écosystème de Symfony pour voir ce qui ce fait et donc faire un choix éclairé.
    Toutefois, j’aimerais savoir comment est évaluée l’importance de la communauté.
    En ce qui me concerne j’ai toujours trouvé la communauté de ZF très riche. Pour moi plus n’est pas synonyme de mieux.
    Chaque problématique que j’ai rencontrées a trouvé une solution grâce à la communauté ZF mais j’ai aussi trouvé beaucoup de choses inutiles ou trop spécifique pour être applicable dans mes projets. Cela ma conduit, malgré tout, à une solution.
    Bref, c’est le point qui me semble difficile à évaluer pour que ça soit un critère de comparaison.
    Comme je le disais, je ne me suis pas intéressé à Symfony. Il y a surement une plus large communauté ou une meilleure par ces contributions.
    Merci pour cet article.

  • Prout-Bravo

    Cela dit, merci pour l’article, je vais partir sur du Symphony.

  • Prout-Bravo

    Par pitié, cessez donc d’utiliser le mot « mature » en français pour autre chose que la mature d’un bateau… La traduction correct de l’anglais « mature » est le français « mûr ». Mûrir, pour enfin faire preuve de maturité, c’est devenir mûr. Comme un fruit mûr est un fruit qui atteint sa maturité. Ah, là là, les méfaits du pr0n anglo-saxon ^^

    • Sergio

      Je sais que c’est hors contexte, c’est vieux de plus de 5 mois et que je ne devrais pas répondre mais…
      mâture est différent de mature => notez le ^ sur le A. Ça change tout! Comme mur et mûr!
      Selon le Larousse qui je l’espère, vous pourrez le considérez comme fiable, mature est adjectif signifiant qui est arrivé à maturité donc mûr. Le mot est issu du latin maturus. Je ne suis pas linguiste alors j’arrête là cette explication.
      Le mot anglais mature ne se traduit pas seulement par mûr mais a aussi le sens « d’adulte » ou de… mature (son sens premier selon le oxforddictionaries). C’est donc bien le fait d’être au meilleur de ces capacités.
      Donc si Symfony est mature, c’est tout à fait correct.

  • Je n’ai jamais utiliser Zend dans mes projet, qu’ils soient professionnels ou personnels, par contre Symfony je connais. En lisant ton article, je cherchais à en savoir plus sur Zend. J’en tire la conclusion (personnelle) que j’ai bien fait de choisir Synfony à la base.

    Néanmoins j’ai remarqué que pas mal d’entreprise cherchent des développeurs PHP méprisant Zend Framework. Que dire du « Synfony vs Zend » dans le milieu de l’entreprise ?

    • Nicolas Hachet

      Je suppose que tu voulais dire « maîtrisant Zend Framework », non ?

      En entreprise, la donne est un peu différente car de nombreuses applications tournent toujours sur des « vieux » frameworks, et notamment Zend 1. A l’époque Symfony est bien moins connu qu’aujourd’hui, et Zend était leader sur les applications PHP. C’était les débuts de la professionnalisation de l’écosystème PHP.

      Du coup les entreprises cherchent toujours ce genre de compétences pour maintenir et faire évoluer les applications. Il y a également de nombreuses entreprises qui font encore tourner des applications PHP from scratch écrites il y a 10 ans..

      A mon sens, nous sommes toujours en transition et il ne faut certainement pas négliger les frameworks « historiques ».

      • Oui « maitrisant », le pire c’est que je me suis relu..

        Ceci explique donc cela.. Je n’avais pas pensé à ce coté maintenance des anciennes solution (et rentabilisation des acquis).

        Bon après ça va être compliqué de se mettre à apprendre Zend 1 seulement maintenant… On va dire que ce sont des postes qui resteront pour ceux qui maitrisent déjà la techno.

      • Jonathan Greco

        Bonjour,
        J’ai lu votre article avec beaucoup d’intérêt, et il est vrai que Zend est vraiment largué sur la documentation en ligne, mais le code est lisible, et on apprend aussi très vite en lisant le code et ce que cela fait exactement. La documentation symfony mâche le travail donne des exemples super pertinents (quand on utilise la couche doctrine sur l’un ou l’autre des framework j’ai pu aussi allez dans la doc de symfony pour m’aider bien que je sois développeur ZF2). Mais il ne faut pas oublier que si SF2 est devenu grand public beaucoup de développeur se sont jeté dessus sans avoir beaucoup d’expérience en PHP natif. Et les résultats sont catastrophiques, on as des « développeurs » PHP qui ressemblent a des scripts kiddies, ou seul le copié collé marche. Alors pour faire des sites bateau, ils font le taf même s’il ne comprennent pas exactement ce qu’il font. Et des « développeurs » SF2 dans ce gout la il y en as beaucoup il faut savoir filtrer lors du recrutement. Alors que chez ZF2, la documentation est pauvre, la communauté est moindre, mais les développeurs qui sont attaché a ce framework sont plutôt bons, car ils ont pas eu trop le choix. La comparaison se fait aussi sur l’approche choisie par l’un ou l’autre des framework, (yaml, twig par defaut dans SF2, tout en PHP dans ZF2) même si c’est modifiable ce sont des critères qui peuvent rentrer en jeu. Ce qui est bien c’est que quand on maitrise bien l’un, le travail pour devenir a l’aise sur son concurrent n’est plus aussi énorme, documentation riche ou pas.