My CakePHP 3 Review - Toujours frais, toujours chaud
Publié: 2022-03-11Le mois dernier, l'équipe CakePHP a annoncé le lancement de la version alpha de CakePHP 3. L'équipe de développement de Cake considère que la version 3 change la donne, donc avec la version alpha de la version 3 maintenant sortie du four, cet article prend un nouveau regard sur CakePHP 3 en tant que framework moderne et efficace pour le développement PHP.
Une histoire brève
De nos jours, il existe tellement d'options en matière de développement PHP. Au fur et à mesure que PHP a mûri, de plus en plus de frameworks PHP sont apparus, offrant aux développeurs un large éventail de choix. Mais il n'en a pas toujours été ainsi.
En 2005, lorsque PHP 4 était encore la norme, il n'y avait pas de framework PHP et développer une approche de codage orienté objet en PHP était certainement un défi. C'est alors que CakePHP est apparu - le tout premier framework PHP MVC. Au cours des près de 10 années qui se sont écoulées depuis sa première sortie, CakePHP a continué d'évoluer, conservant une part de marché saine des développeurs PHP.
Quelle est la popularité du framework CakePHP ? Il est classé dans le top 4 des projets PHP les plus populaires sur GitHub, sur environ 130 000 projets, avec plus de 18 000 membres dans le groupe Google CakePHP avec 32 000 sujets. Avec 270 contributeurs au code et 320 contributeurs à la documentation, il est indéniable que CakePHP a un large public. La popularité répandue et croissante actuelle de CakePHP est bien résumée dans un article de James Watts, membre principal et responsable de la communauté de CakePHP pour la Cake Software Foundation, que j'ai interviewé au cours de la rédaction de cet article.
Avec la version 3 du framework maintenant disponible, CakePHP devrait très certainement rester une force de premier plan dans le monde PHP et un concurrent majeur dans le paysage varié des frameworks PHP d'aujourd'hui.
Quoi de neuf dans la version 3 de CakePHP ?
Cette revue est basée sur la version alpha de CakePHP 3.0, qui intègre un certain nombre de nouvelles fonctionnalités et améliorations, notamment :
Meilleure performance. La version 3 intègre des améliorations des performances du processus d'amorçage, du processus de routage et de plusieurs parties du processus de génération de modèles d'assistance.
Composants et assistants améliorés. La version 3 offre une prise en charge améliorée des "messages flash" avec ses nouveaux FlashHelper et FlashComponent. De plus, le CookieComponent a été amélioré, ce qui facilite la séparation de la configuration des espaces de noms de cookies et du traitement des données des cookies.
Amélioration de la gestion des sessions. La gestion de session a toujours été une classe statique dans CakePHP qui s'est avérée problématique à plusieurs égards. Avec la version 3, vous pouvez désormais accéder à la session à partir de l'objet de requête
$this->request->session()
. Ce changement rend également la session plus facile à tester et permet à CakePHP d'utiliser PHPUnit 4.x.Amélioration de la cohérence des conventions. Le squelette de l'application et les squelettes du plug-in ont été mis à jour pour utiliser la même structure de répertoires afin d'être plus cohérents les uns avec les autres.
Thèmes et plugins fusionnés. Un objectif clé de CakePHP 3 était de rendre les thèmes plus puissants et robustes. En travaillant vers cet objectif, il est devenu évident que ce qui était vraiment nécessaire, c'était que les thèmes fournissent les mêmes capacités que les plugins. En conséquence, n'importe quel plugin peut désormais être utilisé comme thème, ce qui simplifie également l'empaquetage et la redistribution.
Améliorations ORM. Plusieurs modifications de l'API ont été apportées à l'ORM (Object-relational mapping). Plus particulièrement, il est désormais plus simple de spécifier des associations profondes pour les opérations de sauvegarde, et quelques conventions ont été modifiées pour réduire la courbe d'apprentissage et la confusion parmi les nouveaux utilisateurs.
De plus, quelques fonctionnalités supplémentaires sont également prévues pour être intégrées dans la version bêta de la version 3.0. Le plus important :
- Améliorations des fonctionnalités d'internationalisation et de localisation (i18n et L10n)
- Un remplacement pour CacheHelper basé sur Edge Side Include
- Une nouvelle API de routage pour une déclaration de route plus simple et plus rapide
En effet, la version 3 représente une mise à niveau significative par rapport aux versions précédentes de CakePHP.
Pourquoi CakePHP ?
Bien que CakePHP possède de nombreuses fonctionnalités intéressantes, cette revue se concentre sur quelques-unes en particulier qui l'aident vraiment à se démarquer, à savoir :
- Convention sur la configuration
- ORM de CakePHP (mappage objet-relationnel)
- Composants et assistants
Convention sur la configuration
CakePHP a toujours été axé sur le développement rapide et cohérent et, à cette fin, CakePHP met fortement l'accent sur les conventions. Par conséquent, comme Ruby on Rails (dont CakePHP s'est largement inspiré), CakePHP adhère fortement au principe de convention sur la configuration.
Les conventions signifient qu'un développeur n'a pas à penser à "où vont les choses" lorsqu'il apprend à utiliser le framework CakePHP, puisque les valeurs par défaut de ces règles sont déjà mises en place. Bien qu'il soit nécessaire de se familiariser avec les conventions de CakePHP, une fois maîtrisées, le développeur peut se concentrer sur le développement de base, plutôt que d'avoir à se soucier de l'endroit où le code est placé et d'autres problèmes de configuration.
Les conventions de CakePHP sont en contraste frappant avec PHP lui-même, qui est un langage assez libéral. En raison de ses conventions, CakePHP aide à assurer plus de cohérence dans le style et la structure de codage entre plusieurs développeurs et même entre plusieurs équipes. En adoptant un ensemble standard de conventions, Cake s'efforce de rendre le développement plus cohérent.
Pour un schéma de base de données, par exemple, CakePHP fait certaines hypothèses par défaut en termes de comment certaines variables, noms de table et champs seront nommés. Plus précisément, Cake s'attend à ce que :
- Les noms de table seront au pluriel (par exemple,
orders
) - Le nom du champ de clé primaire sera
id
- Les noms de tous les champs de clé étrangère seront basés sur le nom de la table référencée suivi de
_id
(par exemple, la clé étrangère dans une tablecustomers
serait nomméecustomer_id
).
Pour illustrer, considérons une simple revue de deux tableaux ( articles
et users
) d'une base de données d'articles de blog. Dans notre exemple, nous dirons qu'un Articles
"Appartient à" un Users
et un Users
"HasMany" Articles
. Ces relations seraient spécifiées comme suit dans CakePHP 3.0 :
In ArticlesTable.php: class ArticlesTable extends Table { public function initialize(array $config) { $this->belongsTo('Users'); } } In UsersTable.php: class UsersTable extends Table { public function initialize(array $config) { $this->hasMany('Articles'); } }
CakePHP assume les conventions par défaut et sait ainsi automatiquement quelles clés étrangères rechercher (c'est-à-dire, user_id
dans la table articles
) lors de la récupération des associations.
Il est important de souligner, cependant, que CakePHP 3 permet à ses conventions par défaut d'être facilement remplacées. Par exemple, supposons que notre clé étrangère dans la table des users
s'appelle author_id
au lieu de user_id
. Spécifier cela nécessiterait simplement les deux petits changements suivants à notre code pour faire savoir à CakePHP que nous n'utilisons pas la valeur par défaut :
In ArticlesTable.php: class ArticlesTable extends Table { public function initialize(array $config) { $this->belongsTo('Users' => ['foreignKey' => 'author_id']); } } In UsersTable.php: class UsersTable extends Table { public function initialize(array $config) { $this->hasMany('Articles' => ['foreignKey' => 'author_id']); } }
Ainsi, bien que les conventions fassent effectivement partie intégrante de CakePHP et aient certainement leurs avantages, les remplacer si nécessaire est vraiment très simple, comme nous l'avons montré ici.
Alors que certains développeurs peuvent préférer les frameworks PHP (tels que Yii et Laravel) qui ne reposent pas autant sur les conventions, les conventions de CakePHP peuvent en fait être très avantageuses. Ils peuvent aider à réduire considérablement le temps de démarrage d'un développeur CakePHP lorsqu'il est chargé d'améliorer ou de maintenir le code écrit par un autre développeur, car ils se traduisent par une structure et des conventions de codage cohérentes entre plusieurs développeurs et projets CakePHP.
Mappage objet-relationnel (ORM) de CakePHP
Le mappage objet-relationnel (ORM) de CakePHP bénéficie grandement des conventions du framework de CakePHP. En définissant le schéma de la base de données selon les normes de Cake, vous pouvez rapidement connecter des tables entre elles grâce au puissant ORM de Cake. Vous aurez rarement besoin d'écrire une instruction SQL, car CakePHP gère des choses comme les jointures de table, hasMany
et même les relations hasAndBelongsToMany
avec facilité.

En tirant parti du ContainableBehavior
de CakePHP, à travers vos associations de modèles, vous pouvez spécifier les tables et les champs de base de données à sélectionner à partir d'une requête SQL. Cela peut aller jusqu'à plusieurs tables et, grâce à l'ORM, il est facile de construire rapidement des instructions SQL très complexes.
Incidemment, ContainableBehavior
de CakePHP est un excellent exemple de la façon dont CakePHP peut simplifier et rationaliser le développement PHP. Il vous aide à rechercher et à filtrer les données de manière propre et cohérente et peut également contribuer à augmenter la vitesse et les performances globales de votre application. (Cela fonctionne en modifiant temporairement ou définitivement les associations de vos modèles, en utilisant les confinements fournis pour générer une série correspondante d' bindModel
et unbindModel
.)
Le défi avec l'ORM est qu'il rend l'utilisation de SQL si simple que, si un développeur ne fait pas attention, il peut écrire des requêtes SQL inefficaces sans le vouloir. J'ai certainement vu plusieurs fois des applications Cake mal écrites qui n'ont pas rationalisé leurs requêtes. Ces problèmes ont tendance à apparaître quelques années après le déploiement d'un système, lorsque les bases de données grossissent et que les requêtes mal écrites deviennent de plus en plus lentes.
Le problème principal ici est que, avant la dernière version 3 de CakePHP, l'ORM de Cake récupérait par défaut toutes les tables associées lors de l'exécution d'une requête. En conséquence, une simple requête "trouver tout" pourrait potentiellement devenir assez gonflée car le SQL sous-jacent récupèrerait toutes les données de toutes les tables associées. Dans la version 3, ce comportement n'est plus le comportement par défaut. (Et dans les versions précédentes de CakePHP, ce comportement par défaut est facile à désactiver en ajoutant simplement public $recursive = -1;
à votre fichier AppModel.php
principal.)
Dans l'ensemble, un examen de l'ORM de Cake montre qu'il aide vraiment à rationaliser le développement et, s'il est utilisé correctement, est un outil incroyable pour créer rapidement des requêtes complexes. Il est néanmoins vital que les développeurs prennent le temps de bien comprendre l'ORM et de s'assurer que leurs requêtes sont correctement optimisées (comme c'est le cas dans n'importe quel langage).
Composants et Helpers : bibliothèques CakePHP
L'une des grandes fonctionnalités de CakePHP est les bibliothèques intégrées - Composants et Aides - qui éliminent de nombreuses tâches de développement ennuyeuses, répétitives et fastidieuses. Dans le contexte MVC, les composants aident à rationaliser le développement du contrôleur, tandis que les assistants simplifient le codage et la logique des vues (c'est-à-dire la couche de présentation).
Le PaginatorComponent
, par exemple, construit automatiquement une interface de page suivante/précédente à partir d'une requête de recherche. Ajoutez le JsHelper
, et tout à coup vous avez AJAX Pagination, propulsé par votre framework JavaScript préféré (jQuery par défaut).
Un échantillon rapide d'autres aides utiles comprend :
-
TimeHelper
: facilite l'affichage des dates et des heures, en fournissant une suite de fonctions pour le formatage et l'évaluation des valeurs temporelles. -
NumberHelper
: Fournit des méthodes pratiques pour afficher des nombres dans une variété de formats et de précisions courants (ou personnalisés). -
TextHelper
: aide à activer les liens, à formater les URL, à créer des extraits de texte autour de mots ou de phrases choisis, à mettre en évidence des mots clés dans des blocs de texte et à tronquer gracieusement de longues portions de texte.
Et il y en a beaucoup d'autres.
Critiques de CakePHP 3
Bien sûr, chaque framework a ses avantages et ses inconvénients, et CakePHP ne fait pas exception. Voici quelques-unes des critiques les plus courantes adressées à CakePHP en dehors de cette revue :
« Cadre hérité ; gonflé et lent. Cette critique est généralement plus historique, avec une vérité limitée (le cas échéant) aujourd'hui. La prise en charge de versions PHP remontant à PHP 4 a historiquement obligé CakePHP à gérer de nombreux problèmes hérités de PHP. Avec la maturation de PHP, et avec la sortie de CakePHP version 3 en particulier, cette allégation a vraiment perdu sa validité.
"Trop strict et confinant." Bien que les conventions CakePHP présentent des avantages évidents, certains les critiquent néanmoins. Les critiques soutiennent souvent que les conventions sont trop strictes, mais ils ne reconnaissent pas (ou ne reconnaissent pas) que ces conventions peuvent être facilement outrepassées. En adoptant un ensemble standard de conventions, Cake cherche à rendre le développement cohérent, ce qui, étant donné les pratiques de codage par ailleurs lâches de PHP, ne devrait être considéré que comme une chose positive.
"Cycle de libération lent". Un cycle de libération lent n'est pas nécessairement mauvais. Au contraire, un cycle de publication trop agressif peut en fait être plus problématique. En fait, une partie de la raison pour laquelle les versions majeures de CakePHP prennent du temps est d'assurer la rétrocompatibilité avec les versions antérieures de PHP qui sont encore largement déployées. De plus, ce cycle de publication conservateur et l'accent mis sur la compatibilité descendante éliminent le besoin de modifications majeures (et fréquentes) de votre code lorsque de nouvelles versions sont publiées. Il convient également de noter que l'équipe CakePHP 3 est tout sauf lente en ce qui concerne les versions mineures (corrections de bogues, correctifs, améliorations mineures, etc.), qui sont publiées mensuellement . De même, la plupart des tickets de bogue reçoivent une réponse dans les heures suivant leur publication.
"Ce n'est pas une solution prête à l'emploi." Contrairement à de nombreux autres frameworks PHP modernes "d'applications Web prêtes à l'emploi" (tels que Yii, par exemple), CakePHP cherche délibérément à prendre en charge et à activer des solutions personnalisées. J'en ai personnellement grandement profité pour développer un certain nombre de sites Web et d'applications volumineux, personnalisés et basés sur des bases de données.
"Utilise des tableaux de données plutôt que des objets." Ce n'est plus vrai depuis la version 3. Dans les versions précédentes, toutes les données devaient être stockées et référencées sous forme de tableaux imbriqués (par exemple,
$user['User']['username']
). CakePHP 3 résout enfin ce problème, en stockant à la place les données sous forme d'objets (par exemple,$user->username
)."Mauvaise documentation." Il y a une certaine validité à cette critique, dans la mesure où la documentation de CakePHP ne semble pas toujours avoir été écrite avec le débutant à l'esprit (les informations importantes sont parfois discutées en une phrase ou deux, alors que quelques paragraphes de discussion auraient probablement été justifiés ). L'équipe de développement de Cake en est consciente et travaille à améliorer la documentation en conséquence. En fait, la page d'accueil de la documentation de CakePHP 3 indique explicitement un haut niveau d'engagement envers la « qualité, la validité et l'exactitude » de la documentation. Comme CakePHP est un framework piloté par la communauté, un bouton « Améliorer ce document » est fourni sur chaque page de la documentation, permettant et encourageant les utilisateurs de CakePHP à apporter leurs propres ajouts, suppressions ou corrections à la documentation.
Conclusion
Dans l'ensemble, près de 10 ans après sa sortie initiale, un examen de CakePHP révèle qu'il reste un concurrent dynamique et redoutable des nombreux autres frameworks PHP qui ont émergé depuis.
CakePHP est une solution de développement complète et complète. La base de code est mature et les fonctionnalités semblent infinies. Dans l'ensemble, Cake a été conçu pour accélérer le développement, ce qui est important non seulement pour les développeurs de logiciels, mais également pour les investisseurs. Le coût le plus important du développement logiciel est le coût du temps de développement, et CakePHP vise à réduire considérablement le temps de développement.
CakePHP est un projet géré par la communauté. Cela ne peut que s'améliorer à mesure que de plus en plus de personnes s'impliquent. Ayant été impliqué pendant 7 ans et vu la communauté continuer à grandir, je suis ravi de cette prochaine étape pour CakePHP. Le lancement de CakePHP 3 et la maturité de PHP et de CakePHP signifient que le framework continuera à s'améliorer.
Si vous recherchez une solution basée sur PHP qui offre de nombreux avantages similaires à Ruby on Rails (en termes de facilité d'utilisation et de convention par rapport à la configuration), alors donnez à CakePHP un tourbillon. Le tutoriel du blog CakePHP ne prend que quelques minutes à configurer et à exécuter, ou alternativement, CakeCoded propose une série de leçons claires pour aider à familiariser un développeur PHP avec CakePHP et à commencer à l'utiliser. Avec ces ressources, vous verrez rapidement à quel point CakePHP peut accélérer et améliorer vos efforts de développement de logiciels PHP. Prendre plaisir!
Michael Houghton est un ingénieur Toptal basé en Irlande avec une vaste expérience de CakePHP. Il a développé plus de 100 sites Web avec le framework, travaillé avec l'équipe de CakeDC (l'entité commerciale derrière le framework CakePHP), a soumis divers correctifs et a aidé avec la documentation de CakePHP.