Dans le cadre d’une veille stratégique pour un de nos clients publics, nous avons étudié le sujet des frameworks PHP. Il s’agit de faire des préconisations pour aider à l’industrialisation de la filière de développement. L’article suivant constitue la 3ème partie avec une synthèse des frameworks CodeIgniter, Laravel, Symfony et Zend Framework.
1. Comparaison frameworks full-stack
Symfony | Zend | CodeIgniter | Laravel | |
Licence | MIT | New BSD | MIT | MIT |
Détenteur des droits | Entreprise | Entreprise | Université | Communauté |
Date de la dernière version | Mars 2016 (3.0.4) | Janvier 2016 (2.5.3) | Mars 2016 (3.0.6) | Avril 2016 (5.2.6) |
Activité de développement | Élevé | Moyen | Moyen | Élevé |
Popularité en France | Élevé | Moyen | Moyen | Moyen |
Prise en main | Moyen | Moyen | Très facile | Facile |
Accessibilité de la documentation | Élevé | Moyen | Élevé | Élevé |
Architecture | Service | Service (récent) | Intégré | Service |
Contrôleur et routage | Oui | Oui | Oui | Oui |
Templates | Moteur intégré (Twig) | Oui | Oui | Moteur intégré (Blade) |
Accès aux bases de données | Oui | Oui | Oui | Oui |
Console | Oui | Oui | Oui | Oui |
Tests | Oui | Oui | Oui | Oui |
Validation et formulaires | Oui | Oui | Oui | Oui |
Sécurité | Oui | Oui | Oui | Oui |
ORM intégré | Doctrine | Doctrine | Doctrine Datamapper | Eloquent |
PSR-7 Middleware | Oui | En cours | Non | Oui |
Conteneur de service | Oui | Oui | Non | Oui |
Extensibilité avec Composer | Oui | Oui | Oui | Oui |
Performances107 | Moyen | Moyen | Très élevé | Moyen |
Micro-framework | MicroKernel / Silex | Zend Expressive | Aucun | Lumen |
Il existe peu de différence en termes de fonctionnalités d’un framework à un autre. Les composants ne sont cependant pas toujours les mêmes et l’approche de développement est différente. CodeIgniter et Laravel sont les plus simples à maîtriser. Le premier est stable et performant. Le deuxième est moderne, intuitif et extrêmement populaire. Le framework Zend est en cours de refonte complète dans la version 3 et nécessite d’être surveillé. Symfony qui est un framework polyvalent avec de nombreuses références et dispose d’une communauté très active en France. Les deux frameworks recommandés à ce stade sont Symfony et Laravel.
2. Comparaison micro-frameworks
Symfony Microkernel | Zend Expressive | Lumen (Laravel) | |
Licence | MIT | BSD | MIT |
Détenteur des droits | Entreprise | Entreprise | Communauté |
Date de la dernière version | Mars 2016 (3.0) | Janvier 2016 (1.0.0) | Janvier 2016 (5.2.0) |
Activité de développement | Élevé | Moyen | Moyen |
Popularité en France | Élevé | Moyen | Moyen |
Prise en main | Facile | Facile | Facile |
Accessibilité de la documentation | Élevé | Moyen | Élevé |
Contrôleur et routage | Oui | Oui | Oui |
Templates | Activable | Oui | Non |
Accès aux bases de données | Activable | Oui | Oui |
Console | Activable | À ajouter109 | À ajouter110 |
Tests | Activable | Oui | Oui |
Validation et formulaires | Activable | Oui | Oui |
Sécurité | Activable | Oui | Oui via API JSON |
ORM intégré | Activable | À ajouter111 | Oui |
PSR-7 Middleware | Oui | Oui | Oui |
Conteneur de service | Activable | Oui | Non |
Extensibilité avec Composer | Activable | Oui | Oui |
Performances112 | Variable | Élevé | Élevé |
Montée en charge | Composants Symfony ou activation du Kernel standard | Composants Symfony | Migration vers Laravel |
Chaque framework adopte une approche différente pour s’alléger. La modularité de Symfony permet de partir d’une version épurée et de choisir les composants à intégrer. Zend Expressive sorti récemment est en rupture avec la version full-stack actuelle et ne permet pas de faire une montée en version. Lumen quant à lui se veut particulière minimaliste et spécialisé en se focalisant sur les API JSON avec une migration facilitée à Laravel. Compte tenu des éléments précédents, nous pensons dans l’immédiat que le choix de Symfony offrira la flexibilité à l’Administration avec un produit unique qui pourra être décliné en plusieurs versions.
3. Comparaison globale
Micro-framework | Framework full-stack | |
Contexte de développement | Petites et moyennes applications | Polyvalent |
Effort d’adaptation | Faible | Élevé |
Fréquence des correctifs | Élevé | Élevé |
Extensibilité | Facile | Facile |
Prise en main | Facile | Moyen |
Vitesse de développement | Élevé | Élevé |
Contrôleur et routage | Oui (1) | Oui |
Templates | Oui (1) (2) | Oui |
Accès bases de données | Oui (1) | Oui |
Console | Oui (1) (2) (3) | Oui |
Tests | Oui (1) | Oui |
Validation et formulaires | Oui (1) | Oui |
Sécurité | Oui (1) | Oui |
ORM intégré | Oui (1) (3) | Oui |
PSR-7 Middleware | Oui (1) | Oui |
Conteneur de service | Oui (1) | Oui |
Extensibilité avec Composer | Oui (1) | Oui |
Performances113 | Élevé | Moyen |
Montée en charge | Oui (3) | Oui |
(1) Activable pour Symfony
(2) Sauf Lumen
(3) Sauf Zend Expressive
L’utilisation d’un framework PHP micro ou complet apportent des gains de temps et d’effort importants dans l’implémentation de fonctions standards comme le contrôle et le routage, l’administration et les tests et la sécurité. C’est une solution pérenne qui facilitera très certainement le quotidien des développeurs d’applications de plus en plus complexes. Le choix d’un micro-framework autour d’un nombre de composants réduit est une bonne introduction à l’architecture Modèle-Vue-Contrôle. L’industrialisation de l’application sera possible avec la possibilité de montée en fullstack à tout moment pour Symfony et Laravel.
Références
109https://xtreamwayz.com/blog/2016-02-07-zend-expressive-console-cli-commands (site inaccessible)
110http://codrspace.com/MattWohler/creating-a-new-artisan-command-with-lumen/ (site inaccessible)
111https://xtreamwayz.com/blog/2015-12-12-setup-doctrine-for-zend-expressive (site inaccessible)