CakePHP 3 : le renouveau
⏲️ ~7 min de lecture
La version stable devrait sortir début 2015. Nous pensons chez Occitech que cette version comble énormément de lacunes et de manques du framework et peut se réconcilier avec les développeurs qui ont fait le choix d'autres frameworksil y a quelques années.
Que vous utilisiez actuellement CakePHP 2.x ou non, cet article a pour but de vous donner une bonne vision du CakePHP d'aujourd'hui, qui est plus actif que jamais !
Pour les chanceux qui participent au Forum PHP je vous invite à profiter de la session d'un des principaux artisans de cette nouvelle version (notamment au niveau de l'ORM).
Vous ne développez pas encore avec CakePHP ? #
Cette nouvelle mouture repositionne CakePHP dans l'écosystème du langage PHP. Fini l'image de vieux framework"PHP4" due aux choix de rétrocompatibilités faits lors des versions antérieures.
La version 3 veut profiter des dernières avancées de PHP et de sa communauté pour ne pas réinventer la roue et pouvoir (enfin) refactorer certaines couches internes en profondeur.
Basé sur des outils PHP à jour #
- Le framework utilise les outils de PHP 5.4.16+ (et sans doute 5.5+ d'ici les premières versions mineures)
- PSRs (0, 1, 3 et 4 ... toujours des tabulations donc pas de PSR-2 !)
- Composer (
cakephp/app
,cakephp/plugin-installer
) - PHPUnit pur pour les tests unitaires (précédemment une surcouche
CakeTestSuite
était maintenue) - Utilisation de librairies tierces pour des tâches bas niveau : Carbon, Aura Intl, password_compat
- Un REPL basé sur le projet boris
Plus de découplage #
Comme dit précédemment, les choix techniques effectués ont permis de refactorer le cœur du framework en profondeur. De nombreux Traits et autres classes pour les fonctionnalités classiques (Configuration, Logs, Collections ...) ont été extraites et découplées du framework.
Cela induit une plus grande homogénéïté des interfaces pour les utilisateurs, et rend possible une utilisation indépendante de CakePHP ! Un certain nombre de librairies sont donc d'ores et déjà disponibles indépendamment, sans perdre les standards de qualité du coeur de CakePHP (tests et documentation).
Parmi ces librairies :
- cakephp/collection : parcours et manipulation de collections
- cakephp/log
- cakephp/cache
- cakephp/event
- cakephp/datasource : gestion d'Entités / Repositories
- cakephp/validation
- cakephp/utility : gestion des inflections, manipulation de chaînes, Xml ...
Vous trouverez une liste exhaustive sur Github ou Packagist.
Un ADN préservé #
Malgré de grands changements structurels, la philosophie de CakePHP reste identique.
- le paradigme Convention over configuration est toujours bien présent,
- une documentation à jour. Avec cette nouvelle version, la documentation fait partie de la définition de fini : chaque fonctionnalité ou modification du code doit s'assortir d'une mise à jour de la documentation,
- Communautaire : un processus et des discussions ouverts, une roadmap publique et un développement par Pull Requests afin d'avoir un maximum de feedback. De plus l'équipe souhaite promouvoir les plugins externes afin de ne pouvoir se focaliser sur les fonctionnalités premières du framework. Par exemple l'intégration de Twig n'est pas au niveau du coeur, mais par le plugin TwigView
Tous ces points permettent de rendre le framework toujours aussi simple à prendre en main. Malgré l'avancement actuel de la version 3 (actuellement en beta2), la documentation est à jour et il est facile d'avoir une vision de ce qui arrive prochainement.
Ceci couplé à une politique de rétrocompatibilité et suivi des versions sur plusieurs années en font un framework idéal pour des applications professionnelles à grande échelle.
Un ORM "developer-friendly" #
"Toute requête doit pouvoir être faite en quelques lignes simplement"
C'est la vision du nouvel ORM développé dans CakePHP 3, Nous y reviendrons dans un prochain article, d'ici là vous pouvez lire la documentation et nous suivre afin d'être informé de nos futurs articles sur le sujet ;)
Vous développez déjà avec CakePHP #
Les développeurs déjà à l'aise avec le framework ne devraient pas avoir de mal à passer sur cette nouvelle version une fois les quelques gros changements assimilés. L'état d'esprit restant similaire, développer une nouvelle application basée sur CakePHP 3 ne nécessite pas de tout réapprendre.
Moins de magie #
- L'utilisation des Namespaces permet d'utiliser l'autoloader de Composer, et donc de savoir exactement ce qui est chargé et d'où cela vient
- L'utilisation des Traits permet de savoir en un coup d'oeil quelles fonctionnalités sont disponibles dans une classe, et donc comment utiliser les fonctionnalités du coeur. Par exemple :
- une classe utilisant
LogTrait
contiendra une méthodelog()
qui fonctionne comme dans les versions actuelles - une classe utilisant
CollectionTrait
contiendra tout un ensemble de méthodes permettant de naviguer dans ces éléments
- une classe utilisant
- D'autres comportements magiques du framework ont été extraits dans leurs propres classes et sont désormais déclarés explicitement lorsqu'elles sont utilisées. Le meilleur exemple est le
TimestampBehavior
qui permet la gestion automatique de champscreated
etmodified
d'une entité. - La configuration d'une application a également été simplifiée : tout se retrouve dans un fichier
Config/app.php
contenant les configurations de chaque partie du coeur. Une seule et même syntaxe homogène pour tout configurer ! - Enfin le
Router
a également subit un gros travail de simplification, impliquant une perte de fonctionnalités au niveau des paramètres nommés. Si vous aviez l'habitude de les utiliser, il faut désormais utiliser les paramètres GET classiques. Pour information ce travail a amené un gain de performance énorme (une route est trouvée en O(1) au lieu de O(n) précédemment).
Moins de code #
De nombreuses fonctionnalités présentes dans le coeur de CakePHP2 ont été supprimées du coeur au profit de plugins existants, ou créées pour l'occasion :
- les ACL vivent désormais dans cakephp/acl
- le Scaffolding a été supprimé, devant l'émergence de FriendsOfCake/crud
- le
ContainableBehavior
n'est plus ... le nouvel ORM gère ceci en natif, nous en discuterons plus tard - les
Authorizers
(Crud, Controller, Actions ...) ne sont plus dans le cœur. CakePHP ne supporte en natif plus que la méthodeisAuthorized
des Controllers - l'utilisation de librairies tierces pour la gestion du temps (Carbon) et de l'i18n (Aura Intl) ont apporté quelques changements. Si vous utilisiez les gettexts (et j'espère que c'était le cas) jetez un coup d'oeil à la page Using Translation Functions de la documentation
L'état d'esprit est donc de "maintenir moins de code mais mieux", en mettant en avant les plugins développés et maintenus par la communauté.
La liste s'agrandit de jour en jour et vous en trouverez sur https://github.com/cakephp et en fin de http://bakery.cakephp.org/articles/lorenzo/2014/09/28/cakephp_3_0_0-beta2_released
Le nouvel ORM #
Tant attendu chez les développeurs CakePHP, voici LE gros changement de cette mouture. La couche Modèle a été séparée en Entités et Tables (Repositories) permettant de réduire considérablement les responsabilités des Modèles.
De plus la création de requêtes complexes a été facilitée par une approche "diviser pour reigner" grâce aux custom finds que nous connaissions. Adieu donc les 'recursive' => 0
et le ContainableBehavior
, plus de afterFind()
ni de virtualFields
... le nouvel ORM gère ça de manière à mon sens bien plus propre, mais il va falloir que vous vous penchiez sur les changements en détails.
Je vous recommande donc en attendant nos prochains articles de vous plonger sans limite dans la documentation de migration de l'ORM.
Montrez-moi le code ! #
Cet article aurait été bien trop long si j'avais commencé à parler de code, mais ne vous en faites pas nous en publierons prochainement ;)
D'ici là je vous invite à parcourir les ressources ci-dessous :
- le tutoriel Bookmarkr vous expliquant pas à pas une utilisation basique du framework
- la documentation pour aller plus loin
- quelques exemples d'utilisation du nouvel ORM
- une série d'articles sur CakePHP3 par Walther Lalk
- la présentation de José Lorenzo Rodriguez au Forum PHP qui aura lieu dans quelques jours
En attendant les prochains articles sur Cake 3, n'hésitez pas à poser vos questions ou donner votre avis en commentaire : la discussion est ouverte.
Cet article vous a plu ? Sachez que nous recrutons !