Table of Contents : Le Manuel

Conventions CakePHP

Nous sommes de grands fans des conventions plutôt que de la configuration. Bien que cela réclame un peu de temps pour apprendre les conventions de CakePHP, à terme vous gagnerez du temps : en suivant les conventions, vous aurez des fonctionnalités automatiques et vous vous libérerez du cauchemard de la maintenance par l'analyse des fichiers de configuration. Les conventions sont aussi là pour créer un environnement de développement uniforme, permettant à d'autres développeurs de s'investir dans le code plus facilement.

Les conventions de CakePHP ont été crées à partir de nombreuses années d'expérience dans le développement Web et de bonnes pratiques. Alors que nous vous conseillons d'utiliser ces conventions lors de vos développements CakePHP, nous devons mentionner que la plupart de ces principes sont facilement contournables - ce qui est particulièrement utile lorsque vous travaillez avec d'anciennes applications.

Conventions pour les noms de fichiers et les classes

En général, les noms de fichiers sont composés avec le caractère souligné (underscore), alors que les noms de classe sont CamelCased (mots collés avec initiales en majuscule, comme les bosses d'un chameau). Par exemple, la classe AccoladesEtBisousController peut être trouvée dans le fichier accolades_et_bisous_controller.php.

Cependant, le nom de la classe qu'un fichier contient n'apparaît pas forcément dans le nom du fichier. La classe EmailComponent se trouve dans le fichier email.php et la classe HtmlHelper est dans le fichier html.php.

Conventions pour les Modèles

Les noms de classe de modèle sont au singulier et CamelCased. Personne, GrossePersonne et VraimentGrossePersonne en sont des exemples.

Les noms de tables correspondant aux modèles CakePHP sont au pluriel et utilisent le caractère souligné. Les tables correspondant aux modèles mentionnés ci-dessus seront donc respectivement : personnes, grosse_personnes et vraiment_grosse_personnes.

Note des traducteurs francophones : seul le dernier mot est au pluriel et tous les pluriels français ne seront pas compris par CakePHP sans lui indiquer précisément (par exemple cheval/chevaux). Voir pour cela le chapitre sur les inflexions.

Les tables de jointures, utilisées dans des relations "hasAndBelongsToMany", doivent être nommées d'après les tables de chaque modèle qu'elles représentent, dans l'ordre alphabétique (de préférence pommes_zebres plutôt que zebres_pommes). Ainsi, si vous avez dans votre application une telle relation entre les modèles Tag et Posts, le nom de la table devrait être posts_tags.

Conventions pour les Contrôleurs

Les noms des classes de contrôleur sont au pluriel, CamelCased et se terminent par 'Controller'. PersonnesController, GrossePersonnesController et VraimentGrossePersonnesController sont des exemples respectant cette convention.

La première fonction que vous écrivez pour un contrôleur devrait être index(). Lorsqu'une requête adresse un contrôleur mais pas d'action, le comportement par défaut de CakePHP est d'exécuter la fonction index() de ce contrôleur. Ainsi, la requête http://www.exemple.com/pommes/ renvoie à la fonction index() de PommesController, alors que http://www.exemple.com/pommes/view renvoie vers la fonction view() de PommesController.

Dans CakePHP, vous pouvez aussi changer la visibilité des fonctions d'un contrôleur en préfixant le nom par des caractères soulignés. Si une fonction a été préfixée avec un souligné, elle ne sera pas visible sur le Web, via le répartiteur, mais elle sera disponible pour un usage interne.

Conventions pour les Vues

Les fichiers de gabarits de vue (template) sont nommés d'après les fonctions du contrôleur dont elles dépendent, sous la forme soulignée. La fonction soyezPret() de la classe PersonnesController cherchera un gabarit de vue dans : /app/views/personnes/soyez_pret.ctp

Le schéma classique est "/app/views/contrôleur/nom_de_fonction_avec_underscore.ctp".

En utilisant les conventions CakePHP dans le nommage des différentes parties de votre application, vous gagnerez des fonctionnalités sans les tracas et les affres de la configuration. Voici un exemple récapitulant les conventions abordées :

  • Nom de la table dans la base de données : ‘personnes’
  • Classe du Modèle : ‘Personne’, trouvée dans /app/models/personne.php
  • Classe du Contrôleur : ‘PersonnesController’, trouvée dans /app/controllers/personnes_controller.php
  • Gabarit de la Vue : trouvé dans /app/views/personnes/index.ctp

En utilisant ces conventions, CakePHP sait qu'une requête à http://exemple.com/personnes/ sera liée à un appel à la fonction index() du Contrôleur PersonnesController, dans lequel le modèle Personne est automatiquement disponible (et automatiquement lié à la table 'personnes' dans la base) et rendue dans un fichier. Aucune de ces relations n'a été configurée par rien d'autre que la création des classes et des fichiers dont vous aviez besoin de toutes façons.

Maintenant que vous avez été initié aux fondamentaux de CakePHP, vous devriez essayer de dérouler le tutoriel du Blog CakePHP disponible au chapitre 8 de ce manuel.