RSS
 

Les conventions de CakePHP

28 août

On ne le répètera jamais assez : CakePHP, c’est des conventions plutôt que de la configuration … pour le plaisir des développeurs !

Cette article risque d’enfoncer une porte ouverte, de « copier » les différentes sources existantes à l’heure actuelle mais je pense qu’on ne rabachera jamais trop les conventions de CakePHP.

Si la présentation de CakePHP faite il y a quelques jour vous a donné envie de débuter avec CakePHP et que vous commencez à vous faire la main, cet article est à garder dans vos marques-pages tant que vous en aurez besoin !

Voici donc un récapitulatif des conventions de CakePHP. Je vais essayer de faire en sorte d’être le plus clair possible, mais n’hésitez pas à commenter cet article pour plus de précisions. En fin d’article vous trouverez également des liens afin d’approfondir ce sujet.

La base de données

  • Nom des tables : en minuscules et au pluriel, les mots séparés par des underscores « _ »
    • Exemple : bases_de_donnees
  • Clé primaire numérique : nommée id, de type entier et auto-incrémentable
  • Clé primaire UUID : si vous préférez utiliser un UUID comme clé primaire, utilisez également le champ id mais avec un type CHAR(36)
  • Clés étrangères : nom du modèle référencé au singulier suivi de « _id »
    • Exemple : reference_id pointera vers un enregistrement de la table references dont le champ id correspond
  • Champs « automagiques » de dates : les champs created et modified (ou updated) de type DATETIME et ayant comme valeur par défaut NULL seront gérés automatiquement
  • Champs « automagiques » de description : title (prioritaire) ou name seront utilisés par CakePHP comme intitulé de l’enregistrement (au lieu de l’id)
  • Tables de jointures (relation HABTM) : nom des modèles au pluriel et dans l’ordre alphabétique, les mots séparés par des underscores « _ ». Elle doit contenir au moins deux clés étrangères (une vers chaque modèle)
    • Exemple : bases_de_donnees_references et non references_bases_de_donnees contiendra au moins les champs bases_de_donnee_id et reference_id

Les modèles

  • Nom du fichier : en minuscules et au singulier, les mots séparés par des underscores « _ »
    • Exemple : bases_de_donnee.php (Notez l’erreur de français ici … c’est normal on travaille avec CakePHP et pas GateauPHP :D le pluriel est donc détecté pour l’anglais et il faudra donc faire attention, utiliser de l’anglais ou faire un peu de configuration)
  • Nom de la classe : au singulier et CamelCased, c’est à dire que l’on supprime les underscores du nom de fichier et on met la première lettre de chaque mot en majuscule … comme les bosses d’un chameau !
    • Exemple : BasesDeDonnee

Les contrôleurs

  • Nom du fichier : en minuscules et au pluriel, les mots séparés par des underscores « _ » et se terminant par « controller »
    • Exemple : bases_de_donnees_controller.php
  • Nom de la classe : au pluriel et CamelCased, se terminant par « Controller« . Même principe que pour les modèles … on supprime les underscores du nom de fichier et on met la première lettre de chaque mot en majuscule … comme les bosses d’un chameau ! (ca va finir par rentrer !)
    • Exemple : BasesDeDonneesController
  • Méthode par défaut : par défaut, c’est la méthode index() du contrôleur qui est appelée
  • Méthode inaccessible : préfixée d’un underscore « _ », une action ne sera pas accessible au public
    • Exemple : http://votresite.com/membres/action fonctionnera si la méthode de Membre se nomme action() mais échouera si elle se nomme _action()

Autres fichiers

  • Vues : un fichier situé dans /app/views/mon_controleur/action_correspondante.ctp pour l’action actionCorrespondante de MonControleurController
  • Composants : situé dans /app/controllers/components/mon_composant_utile.php la classe sera nommée MonComposantUtileComponent (héritant de la classe Object)
  • Helpers : dans /app/views/helpers/mon_helper_pratique.php la classe se nommera MonHelperPratiqueHelper (héritant de la classe Helper)
  • Comportements : dans /app/models/behaviors/mal_poli.php la classe se nommera MalPoliBehavior (héritant de la classe ModelBehavior)

Respectez ces quelques conventions et profitez de la puissance de CakePHP ! De plus, votre travail sera facilement maintenable car vous aurez les mêmes conventions que vos collègues … et que des milliers de développeurs !

Voici quelques liens qui m’ont servi de base et qui pourront vous être utile. Cela se passe sur Cakebaker, CakePourTous (les bosses du chameau, vous vous rappelez ?) et bien sur dans le manuel. Si vous souhaitez, vous pouvez également vous imprimer la CakeSheet « officielle » récapitulant tout ça … et bien plus encore !

N’hésitez pas à me demander plus d’informations et à me faire remonter les erreurs qui auraient pu se glisser dans cet article !

Pensez à utiliser mon flux RSS pour vous tenir au courant des futurs articles ! Vous pouvez aussi me retrouver sur Twitter pour une actualité plus fréquente.

 
2 Comments

Posted in En vrac

 

Tags: ,

  • http://quintainsurance.blogspot.com Anneke

    People should read this.

  • fednad

    Bonjour,

    J’ai suivi le tutorial du blog sur cakePHP et je ne parviens pas à faire apparaître la liste des blogs. Je n’ai pas très bien compris la disposition des fichiers dans l’arborescence de cakePHP.
    J’ai dézippé cakePHP dans mon DocumentRoot et lorsque j’affiche http://localhost/cake, j’ai bien la page d’index avec la confirmation de la connexion à la base de données. Mais l’affichage du blog ne fonctionne pas, quelle est l’adresse à saisir ? http://localhost/cake/posts/index

    Merci d’avance pour votre aide. Et merci pour votre blog, très intéressant.
    Cordialement
    Stéphane