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 2ème partie avec un panorama des frameworks CodeIgniter, Laravel, Symfony et Zend Framework.
Il existe un grand nombre de frameworks open source PHP et un certain nombre de critères peuvent permettre de les comparer. quelques critères qui semblent interessants :
La maturité de la solution et son utilisation à une échelle industrielle
Une prise en main facilitée qui tient compte de la complexité du code, de la procédure d’installation, de la présence des tutoriels vidéos, des formations en physique en France et des avis des utilisateurs.
Une documentation claire et riche en français
L’activité de la communauté en particulier en France
La fréquence des mises à jour en lien avec l’évolution du Web et du PHP
Une solution polyvalente adaptée aux petites et grandes applications
Dans l’exercice de comparaison de frameworks, nous pouvons choisir un selection de ceux qui nous semblent le plus interessants :
Nom | Licence | Description |
CodeIgniter | MIT | Framework MVC simple d’utilisation disposant d’une documentation complète et d’une communauté très active. |
Symfony | MIT | Framework complet d’origine française, très populaire disposant de solides références, d’une documentation riche et d’une communauté très active en France. |
Zend Framework | NewBSD | Framework complet développé par les fondateurs du PHP. Le développement de la version est en cours et promet de nombreuses améliorations en lien avec les dernières évolutions du PHP. |
Laravel | MIT | Framework actuellement très en vogue dans le monde qui se distingue par sa simplicité d’utilisation. Il dispose d’une communauté de développement très actif. |
CakePHP57 | MIT | Framework qui imite le fonctionnement de Ruby on Rails en léger repli depuis 2014. Communauté peu active en France. |
Yii58 | BSD | Framework performant mais en léger repli depuis 2014. Communauté peu active en France. |
Slim59 | MIT | Micro-framework populaire et performant. |
Phalcon60 | BSD | Framework PHP le plus rapide basé sur le langage C. |
Fat Free61 | GPL | Framework ultra léger (65kb) et performant |
Kohana62 | BSD | Fork de CodeIgniter en repli depuis 2011 |
FuelPHP63 | MIT | Framework performant en repli depuis 2011 |
CodeIgniter
Licence : MIT
Site officiel : http://www.codeigniter.com/ (en anglais)
Site Github : https://github.com/bcit-ci/CodeIgniter
Dernière version : 3.0.6. (11 mars 2016)
Présentation
Créé par la société EllisLab en 2006, CodeIgniter est un framework PHP conçu pour faire des développements rapides. En 2014, l’éditeur annonce que le développement du projet est repris par l’Intitut de Technologie de British Colombia. L’activité de développement est aujourd’hui relativement stable avec plus d’une centaine de commits par mois et une petite dizaine de contributeurs mensuels64.
CodeIgniter est un framework intégré qui se distingue par le peu de ressources utilisé et sa simplicité. Il permet en particulier de bien appréhender l’architecture MVC sans en faire un prérequis. La documentation est claire et existe également en français (voir lien ci-dessus). Il existe de nombreux tutoriels notamment en vidéo65 66.. Le code est particulièrement léger67 et ne nécessitant seulement une extraction de la librairie et un paramétrage contrairement à la plupart des frameworks PHP 68. CodeIgniter est enfin plébiscité par ses utilisateurs pour être facile d’utilisation69. .
CodeIgniter est géré par une équipe de cinq personnes70. Le développement de la version 4 qui vise à supporter le PHP7, n’a cependant pas encore commencé et la publication est seulement prévue pour le deuxième semestre de 201771.
Fonctionnalités
CodeIgniter suit une architecture intégrée ce qui ne permet pas la réutilisation facile des composants séparés ou d’un sous-ensemble de composants. Les fonctionnalités principales72 sont :
La sécurité : encrypt, encryption, security, session,
L’administration : benchmarking, caching, config, loader, unit testing
Le contrôle et le routage: file uploading, fpt, image manipulation, javascript, migrations, html table, trackback, uri, xml rpc, xmp rpc server, zip encoding
Les formulaires : form validation
L’affichage et les autres applications : calendaring, email, langage, shopping cart, output, pagination, template parser, typography, user agent,
Micro-framework
CodeIgniter ne dispose d’aucun micro-framework. Notons cependant qu’íl est cependant déjà très optimisé avec des performances qui sont très supérieures à ceux des frameworks full-stack et comparables aux micro-frameworks du marché73.
Symfony
Licence : MIT
Site officiel : http://symfony.com/
Site Github : https://github.com/symfony/symfony
Dernière version : 3.0.4 (Mars 2016)
Présentation
Sympfony est créée fin 2004 par Fabien Potencier de SensioLabs, une PME française basée en région parisienne. Le projet rendu open source, bénéficie aujourd’hui d’une communauté de plus de 500 000 développeurs dans le monde et est utilisé par de nombreuses références notamment Drupal, Yahoo ! et Dailymotion. De nombreuses conférences et formations sur Symfony sont organisées chaque année dans le monde74.
Symfony suit une architecture modulaire et se distingue par ses composants génériques réutilisables par d’autres frameworks ou applications PHP ce qui en fait sa popularité. Les fonctionnalités modulables et adaptables facilitent et accélèrent le développement de sites Web complexes. La documentation est riche et claire et existe en français (voir lien ci-dessus). De nombreux tutoriels notamment en vidéo sont disponibles75 76. Des formations certifiantes payantes sont aussi proposés par SensioLabs en France77.Le code de Symfony est relativement plus complexe à cause de l’architecture modulaire. Même si cela n’est pas un indicateur fiable, nous pouvons observer que Symfony possède 3 fois plus de lignes de code que CodeIgniter ou que Laravel78. L’installation de Symfony est relativement plus compliqué que CodeIgniter avec des commandes en ligne à réaliser et des dépendences à gérer79. Les utilisateurs jugent Symfony moins simple d’utilisation que CodeIgniter80 81.
Symfony est développé à la fois par l’éditeur SensioLabs et la communauté de Symfony. Plus de 300 commits sont recensés tous les mois avec une petite cinquantaine de contributeurs mensuels82. La roadmap est clairement définie avec une version mineure tous les 6 mois et une majeure tous les 2 ans. De plus, il existe une version standard maintenue pendant 14 mois et une version LTS (Long Term Support) tous les 2 ans maintenus pendant 4 ans. À noter que la version 3 de Symphony publiée en novembre 2015, n’apporte pas de nouvelles fonctionnalités mais un nettoyage des composants obsolètes.
Fonctionnalités
Symfony intègre nativement de nombreux composants PHP open source populaires notamment l’ORM Doctrine, le moteur de template Twig, la messagerie Swiftmailer. Les fonctionnalités de Symfony sont les suivants :
La sécurité : Guard, LDAP, Security,
L’administration : BrowserKit, ClassLoader, Console, Config, Dependency Injection, Debug, Process, PropertyAccess, PropertyInfo, Stopwatch, VarDumper
Le contrôle et le routage: Assetic, CssSelector, DomCrawler, Event Dispatcher, File System, Finder, HTTPKernel, Serializer, ExpressionLanguage, HTTPFoundation, HTTPKernel, OptionsResoler, Routing, YAML
Les formulaires : Form, Validator
L’affichage et les autres applications : Intl, Templating, Translation
À noter que chacun des composants indépendants sont réutilisables de façon autonome ou avec d’autres frameworks. Il est également possible de construire un nouveau framework adapté aux besoins à partir d’un sous ensemble des composants ci-dessus. C’est l’objet de la partie suivante.
Microframework
De par son architecture modulaire, Symfony, peut être utilisé comme un micro-framework. La récente version 2.883 avec le caractère Microkernel simplifie la création d’applications Symfony plus légères et rapides voire même avec un unique fichier. La configuration se fait directement avec une installation classique en ajoutant quelques lignes de code supplémentaires. Le Microkernel est une version dépouillée de Symfony, il convient ensuite au développeur d’ajouter les composants dont il a besoin. Les instructions complètes de la manipulation sont détaillées dans le Cookbook84 de Symfony.
La société Sensiolabs a également développé Silex, un micro-framework basé sur Symfony s’inspirant de la librairie Sinatra sur Ruby. Silex expose un API intuitif et concis pour produire des applications à fichier unique, tout en permettant une extensibilité avec des bibliothèques tiers. Silex a connu une grande popularité jusqu’à novembre 2015, où il ne reçoit plus aucun commit de contributeurs. La date coïncide avec la sortie du Microkernel de Symfony. Dès lors, nous pouvons faire l’hypothèse que Sensiolabs a décidé de se concentrer ses efforts de développement sur Symfony au détriment de Silex.
Zend Framework
Licence : New BSD
Site officiel : http://framework.zend.com/
Site Github : https://github.com/zendframework/zf2
Dernière version : 2.5.3 (Janvier 2016)
Communauté francophone : http://www.z-f.fr/
Présentation
Zend Framework est créée en 2006 par la société américaine Zend Technologies, elle-même fondée par Andi Gutsmans et Zeev Suraski, les fondateurs du PHP. Il convient de noter que Zend Technologies produit également Zend Server, une distribution PHP complète et optimisée disponible en versions propriétaire et communautaire, et Zen Studio, un IDE propriétaire qui s’intègre parfaitement avec les deux produits précédents.
Zend Framework se distingue par des composants entièrement orientés objet PHP5 et suivant une syntaxe de programmation PHP stricte permettant d’avoir un code de qualité85. Il est ainsi plus facile d’étendre et de personnaliser les composants sans intervenir sur le coeur du Framework. La version 2 du Framework a été publiée sous une licence libre en 2012 après deux ans de développement. Le développement de Zend Framework est assuré par la société éditrice et une communauté qui peuvent contribuer au code selon des règles strictes86. Très peu de commits ont été réalisés depuis 1 an sur la version 2 de Zend87. Les mises à jour sont essentiellement des corrections et des patches de sécurité. La documentation est riche mais complexe et pas très accessible. Il n’existe pas de documentation en français, seulement une communauté (voir lien ci-dessus). Des tutoriels vidéos existent pour faciliter la prise en main88. À noter que des formations certifiantes payantes sont proposées par la société éditrice en France89. L’installation se fait via Composer et nécessite des paramétrages du serveur90. La philosophie de Zend Framework a toujours été de développer des applications maintenables, sécurisés et testables. Il en découle un code plus robuste mais également plus complexe. Zend Framework est réputé pour être compliqué par les utilisateurs91 92.
L’architecture intégrée du framework Zend est abandonnée à partir de la version 2.593 au profit d’une approche plus modulaire où chaque composant a son propre cycle de développement. Le développement de la version 3 s’est accéléré début 201694 suite à la sortie du micro-framework Zen Expressive95 qui pose les fondations d’un nouveau framework plus performant et interopérable avec la capacité d’utiliser les librairies applicatives middlewares prévues par le PSR-7. Aucune date de sortie n’a cependant été annoncée et aucun code source n’a été publié à ce jour.
Fonctionnalités
Zend Framework a adopté depuis peu une structure modulaire. Il emprunte de nombreux composants à Symfony. C’est aujourd’hui un méta-paquet avec une cinquantaine de composants96 qu’on peut regrouper de manière suivante :
La sécurité : zend-authentication, zend-captcha, zend-crypt, zend-escaper, zend-ldap, zend-permissions-acl, zend-permissions-rbac, zend-session, zend-stdlib, zend-tag, zend-filter, zend-inputfilter
L’administration : zend-cache, zend-code, zend-console, zend-config, zend-i18n, zend-loader, zend-memory, zend-mvc, zend-modulemanager, zend-server, zend-servicemanager, zend-debug, zend-log, zend-test
Le contrôle et le routage : zend-db, zend-dom, zend-di, zend-eventmanager, zend-feed, zend-file, zend-http, zend-json, zen-math, zend-serializer, zend-soap, zend-text, zend-uri, zend-xmlrpc, zendxml,
Les formulaires : zend-form, zend-validator
L’affichage et les autres applications : zend-navigation, zend-paginator, zend-progressbar, zend-view, zend-mail, zend-mime
Microframework
Zend Expressive est le micro-framework lancé par Zend Technologies en octobre 2015. La version 1.0.0 a été publiée en janvier 2016. Il transforme Zend Stratigility, fondation pour le développement des applications à partir de middleware PSR-7, en un véritable framework. Zend Expressive ajoute en particulier les fonctionnalités de :
faire du routage dynamique
de l’injection de dépendance via container-interop
optionnellement du templating (Plates, Twig ou PhpRenderer) et de la gestion d’erreur
L’investissement dans le PSR-7 et le micro-framework Expressive apporte selon la société de nouvelles idées en termes d’interopérabilité et de conception d’applications. Le middleware apporte une nouvelle approche pour la réutilisation et la composition plus simple à comprendre pour construire des applications complexes à partir de composants simples.
Zend Technologies continuera d’investir dans le Framework full-stack Zend pour permettre aux applications de bénéficier de sa structure flexible. Elle envisage également d’ajouter la fonctionnalité PSR-7 dans ce framework pour couvrir un maximum d’usages et de trajectoires de migration pour les applications Zend. Le développement de la version 3 devra prendre la forme d’une mutation progressive et rétrocompatible pour éviter un nouveau « big bang » entre Zend Framework 1 et Zen Framework 2.
Laravel
Licence : MIT
Site officiel : https://laravel.com/
Site Github : https://github.com/laravel/laravel
Dernière version : 5.2.6 (Avril 2016)
Communauté francophone : https://laravel.fr/
Présentation
Laravel est créé tardivement en 2011 par l’américain Taylor Otwell dans l’optique de fournir un framework plus sophistiqué que CodeIgniter qui ne disposait pas de certaines fonctionnalités comme l’authentification ou l’autorisation. La communauté se développe rapidement autour de Laravel en même temps qu’il rattrape son retard par rapport aux concurrents.
Laravel se distingue par sa capacité à intégrer rapidement des innovations technologiques pour apporter de la simplicité dans le développement97 : l’ORM Eloquent avec Active Record, le gestionnaire de paquets Composer, le nouveau moteur de template Blade, l’injection des dépendances, l’autoloading des classes, l’architecture REST, l’alimentation automatique des bases de données (seeding).
Laravel est plébiscité par ses utilisateurs par son accessibilité et sa modernité. Le site Web épuré, innove particulièrement en proposant : des Laracasts ou tutoriels vidéos pédagogiques sont réalisés par la société éditrice98, Spark qui permet de déployer rapidement des applications en SaaS et Lumen, un microframework performant basé sur Laravel. La documentation est claire et bien organisée et il existe une communauté francophone (voir lien ci-dessus). La procédure d’installation de Laravel se fait via Composer et nécessite une configuration importante de l’environnement du serveur99. De l’avis général des développeurs, la prise en main est légèrement plus difficile que CodeIgniter compensée par un support communautaire plus active et une documentation légèrement plus riche100 101.
Laravel publie très fréquemment de nouvelles versions. En moyenne 400 commits sont réalisés par une soixantaine de contributeurs chaque mois102, ce qui en fait le framework PHP le plus actif à ce jour devant Symfony103. La version 5.1 publiée en juin 2015 est la première en LTS avec un support de sécurité de 3 ans. Elle vise à s’adresser davantage aux grandes organisations et aux applications critiques.
Fonctionnalités
Laravel a une structure très orientée web service. Il emprunte de nombreux composants à Symfony mais dispose de ses propres ORM Eloquent et moteur de template Blade. Les fonctionnalités de Laravel sont :
La sécurité : Authentication, Authorization, Encryption, Session, Hashing
L’administration: Artisan Console, Cache, Package Development, Queues, SSH Tasks, Task Scheduling, Errors & Logging, Testing
Le contrôle et le routage : Collections, Controllers, Elixir, Events, Filesystem / Cloud Storage, Helpers, Middleware, Redis, Routing, Requests,
Les formulaires : Validation
L’affichage et autres applications: Responses, Views, Blade Templates, Billing, Localization, Mail, Pagination,
Micro-framework
Lumen est un micro-framework basé sur Lumen. La version 5.2. est très minimaliste se focalisant uniquement sur la fourniture d’API REST JSON. En ce sens, les composants pour la session et l’affichage disparaissent du micro-framework. L’authentification se fait à l’aide des clés et des entêtes API comme indiqué dans la documentation104. Des helpers sont fournis pour tester les API JSON et leurs réponses à travers les méthodes get, post, put, patch et delete105.
Les composants de Laravel inclus sont :
La sécurité : Authentication, Authorization, Encryption
L’administration : Cache, Errors & Logging, Queues, Unit Testing
Le contrôle et le routage: Databases, Events, Service Container, Service Providers, Routing, Middleware, Controllers, Requests, Responses
Les formulaires : Validation
Nous remarquons qu’il n’y a pas de fonctions d’affichage et l’administration est réduite au minimum. Lumen est conçu pour le développement de micro-services et d’API contrairement à Laravel qui convient pour le développement d’applications avec une interface utilisateur. En pratique, le plus simple est de basculer à un framework Laravel complet dans le cas où il y a des fonctions manquantes. Il suffit pour cela de copier les configurations de routage et les classes sur une installation Laravel neuve sans aucune autre modification106.
Rendez vous dans un prochain article pour « comparer » ces outils !
Références
65http://tutorialcodeigniter.com/ (site inaccessible)
67http://www.revillweb.com/tutorials/codeigniter-tutorial-learn-codeigniter-in-40-minutes/ (site inaccessible)
70https://www.codeigniter.com/help/about (site inaccessible)