CakePHP, alternative à Symfony ?

#cakephp#framework#php#symfony

CakePHP est un framework PHP dont la première version date de 2005. Ce framework s’inscrit dans la même philosophie que Ruby on Rails puisqu’il s’agit du portage de Rails selon les développeurs de Cake. Reprenant les principes de Ruby on Rails, Cake se base sur une architecture MVC. Il ne nécessite que très peu de configuration pour fonctionner car il se base sur de nombreux fonctionnements par défauts et conventions de nommage.

Son installation se fait simplement en décompressant l’archive où l’on souhaite l’utiliser. On accède alors directement au code PHP de Cake via le répertoire cake mais il est recommandé de ne pas modifier le framework pour pouvoir le mettre à jour facilement. Les vues se présentent dans des fichiers .thtml contenant du code HTML et PHP. Celles-ci permettent d’afficher les informations à l’utilisateur. Cake utilise les templates PHP auxquels on peut ajouter des fonctionnalités (helpers) utilisables dans les vues.

Les modèles facilitent l’accès et la mise à jour des données d’un ou plusieurs SGBD via l’utilisation d’une implémentation PHP de ActiveRecord (design pattern de lecture/écriture d’un SGBD). A chaque table d’une base de données correspond une classe modèle, cette classe héritant de la classe AppModel de cakePHP qui met à disposition des fonctions pour la lecture et l’écriture des données dans la table. Il est aussi possible d’exécuter des requêtes SQL pour les opérations complexes.

Cette couche de mapping objet/relationnel permet avec quelques lignes seulement de gérer la validation des données (existence et type) et les relations avec les autres tables de la base.

Les contrôleurs répondent aux requêtes de l’utilisateur, à chaque fonction d’un contrôleur correspondant une URL. Les contrôleurs utilisent les classes modèles pour manipuler les données. De même que pour les vues, il est possible d’ajouter des composants pour ajouter des fonctionnalités supplémentaires utilisables dans les contrôleurs.

De plus, Cake dispose de l’outil de génération de code Bake disponible en ligne de commande ou avec une interface Web. Cet outil permet de générer les modèles, vues et contrôleurs respectant les conventions de Cake. Citons également la fonction d’échafaudage (scaffolding) permettant de bâtir aisément un prototype à partir d’une simple modélisation du SGBD.

Cake PHP fournit aussi un système de cache, un support natif d’AJAX et une gestion de sécurité (différents droits d’accès pour chaque utilisateur). De plus, on peut ajouter des extensions, par exemple pour gérer les données XML. Enfin, la documentation de Cake est de qualité et propose des tutoriaux très utiles.

De manière générale, le fonctionnement de Cake est assez intuitif, ce framework alliant à la fois souplesse et rigueur dans le code. En effet, les règles de nommage obligent à une homogénéité du code entre les développeurs et facilite ainsi la communication et la maintenance du code. Il faut noter que d’autres frameworks PHP dont Symfony se basent sur l’architecture MVC et les principes introduits par Ruby on Rails.

Points forts, points faibles

Avantages

  1. Facilité de maintenance du code.
  2. Intuitivité du fonctionnement du MVC, prise en main rapide.
  3. Souplesse d’utilisation grâce à la possibilité d’ajout de fonctionnalités (bibliothèques, composant).
  4. Rapidité du développement.
  5. Fonctionne avec PHP4 et 5.

Inconvénients

  1. L’implémentation de ActiveRecord multiplie les requêtes en base pour prendre en compte la structure des tables et des requêtes à construire. Ceci peut rapidement entraîner une dégradation des performances.
  2. L’utilisation de Cake rend très difficile l’utilisation d’un débogueur PHP, notamment intégré dans un IDE comme Eclipse.
  3. CakePHP impose des conventions de nommage pour la création de la base de données. Il est donc difficile de l’adapter à un modèle existant.
  4. CakePHP est peu utilisé et ne bénéficie que d’une communauté limitée.

Symfony

C’est peut être le framework le plus proche de Cake, les principes étant exactement les mêmes (MVC, conventions). Comme Symfony est plus utilisé que Cake, il bénéficie d’une communauté plus large et plus active. Sur le plan technique, Symfony se différencie par des fonctionnalités en plus (fonctions de débogage, gestion de l’internationalisation) et par l’accès aux données qui utilise l’ORM Propel. Ce mode d’accès utilise un descriptif XML de la base de données qui peut être généré automatiquement à partir de celle-ci. De plus, il est prévu que Symfony supporte à l’avenir un autre ORM (doctrine) car Propel souffre parfois de problèmes de performances. Il faut noter qu’à la différence de Cake qui supporte le PHP 4 et 5, Symfony ne supporte que le PHP 5. Cet élément peut s’avérer déterminant dans le choix du framework et trancher en faveur de CakePHP.

Conclusion

Tout comme Symfony, CakePHP allie simplicité et rapidité de développement. Même s’il souffre de problèmes importants (Débuggeur et performances dans certains cas), il est idéal pour le développement agile. L’arrivée de la version 1.2 devrait corriger certaines lacunes, en particulier la gestion de l’internationalisation. L’intérêt principal de CakePHP est de pouvoir servir d’alternative à Symfony lorsque l’on a besoin du support de PHP 4 ou que les performances de Propel sont trop mauvaises. On peut donc s’interroger sur la pérennité de cette solution car son intérêt repose sur des défauts de Symfony, en particulier sur l’incompatibilité de ce dernier avec PHP 4. Ces défauts peuvent ou vont être corrigés à l’avenir, ce qui obligera CakePHP à trouver de nouveaux atouts s’il veut continuer à exister face à Symfony.