Go to content Go to sidebar

les Conventions en cakePHP

J’ai beaucoup insister sur les conventions dans les posts précédents dans ce post on va détaillé un peu plus cet aspect fondamental de CakePHP.

Qui dit conventions dit accords.
Une convention n’est pas une règle.
Une règle c’est quelque chose d’obligatoire, une convention non. Mais ça peut engendrer des pénalités, dans notre contexte c’est une diminution de la productivité.
Cependant la convention peut créer des obligations. C’est-à-dire qu’on dit : voilà cette chose elle est comme ça. Pourquoi ? Ben pourquoi pas ? On bâtit dessus et on avance.

Et pourquoi ?

Un seul mot, productivité.

Ok, je comprends mieux, mais Cake dans tout ça ?

Vous l’avez compris, Cake favorise la convention à la configuration, au lieu de proposer des fichiers de configuration longs et encombrants il propose des conventions, si on les respecte on va voir notre productivité augmenter sinon ben y a toujours moyen de faire ce qu’on veut (l’aspect flexible) mais pas aussi rapidement que si on suit les conventions.

Quel genre de conventions cake propose-t-il alors ? Principalement des conventions de nommage, des fichiers aux champs de base de données, mais pas seulement.

De toute façon on va voir les plus importantes maintenant :

La base de données

Est-ce que vous nommez vos tables en majuscule ou en minuscule ? En pluriel ou en singulier ? Et les champs ? La clé primaire ? Les clés étrangères ? Vous ne suivez aucune logique ?

Cake propose une façon d’écrire tout ça :

Les Modèles

Les modèles sont souvent liés aux tables de la base de données.

Ses conventions sont censées améliorer la création de code et le rendre plus lisible.
Maintenant, si pour une raison (j’espère juste) ou une autre, vous ne pouvez pas les respecter (pas possible de migrer la base de données car d’autres logiciels l’utilisent..), vous pouvez spécifier le nom du modèle avec var $name dans la définition de la classe. Aussi vous pouvez dire à cake d’associer une table à ce modèle en le spécifiant avec var useTable toujours dans la définition du modèle


// mon_model.php
Class MonModel extends AppModel {
	var $name = ‘MonModel’ ;
	var $useTable = ‘une_table’ ;
}

Contrôleurs


// action invisible 
function _actionx(){}
// action visible
Function actiony(){}

Les Vues

Le domaine vu est composé de trois choses, les layouts (gabarits) les éléments et les views (vues)

Les vues prennent le nom des actions associées. Mais puisque c’est des fichiers ils sont en minuscule, si l’action à un nom composé alors la vue les sépare par _.
Si on a une vu ProduitsController ::AjouterAuPanier() sa vue sera app/produits/ajouter_au_panier.thtml ( .ctp pour cake 1.2 )

Les composants

Les composants sont des classes réutilisables qui encapsulent un traitement logique et apportent un aide aux contrôleurs. Le nom de ces classes doit être suffixé par Component, le fichier par contre ne le doit pas.


// app/controllers/components/mon_composant.php
class MonComposantComponent extends Object {}

Les Helpers

Les Helpers sont des classes réutilisables qui encapsulent un traitement de présentation et apportent un aide dans le domaine Vue. Le nom de ses classes doit être suffixé par Helper, le fichier par contre ne le doit pas.


// app/views/helpers/mon_truc.php
class MonTrucHelper extends Helper {}

Vendors

vendor et tout code tiers exploitable immédiatement sans modification pour enrichir l’application. Pas de conventions donc pour les vendors. Exemple de vendors, PEAR, AMFphp, ou tout simplement une classe que vous avez écrite.

On est d’accord maintenant ?

Voilà, avec un peu de pratique tout ça deviendra évident, vous permettra ainsi de se focaliser sur d’autres choses plus importante. et d’aller plus vite.

Comments:

  1. Si on veut avoir des actions invisibles, on doit les préfixer par _

    // action invisible
    function _actionx(){}
    // action visible
    Function _actiony(){}

    ça serait pas plutôt
    Function actiony(){} ?

    merci pour ce blog très intéressant :)

  2. Yep, typo, corrigé, merci.

  3. on dit “post” pas “poste”, sinon ce post est intéressant ;)

  4. Yep, typo, Corrigé. merci².

  5. On peut aussi ajouter un prefix admin_ à une méthode (action) d’un contrôleur si l’on souhaite y accéder avec une URI tel que localhost/admin/produits/action.
    Ce prefix peut être défini par la constante CAKE_ADMIN dans le fichier app/config/core.php

    Cela est assez utile si votre site web et sa partie admin sont regrouppés dans une seule appli web et que vous souhaitez démarquer les actions admin des autres.

    :-)

  6. très bon site, félicitation à son auteur

  7. Je comprends bien la nécessité d’avoir des conventions de nommages, mais ce que j’aimerais comprendre c’est la logique du traitement que Cake en fait? Est-ce qu’il y a des (routines de vérifications) qui lui permettent de bien orienté le code dans les bonnes composantes et en cas d’infraction, ce code n’est pas traité ou génère une erreur ??

  8. Bien évidemment :)

  9. Hello,
    P’tite question de débutant a propos des bases de données. Si dans une table, on a deux clés étrangères qui se referent à la même table( par exemple, un ticket qui a comme clé étrangère l’id du demandeur et l’id de la personne assignée qui sont toutes les deux des personnes), on s’en sort comment?
    Merci et bravo pour ce site.

  10. Bonjour Yagh,
    Il suffit de nommer tes associations:
    var $belongsTo = array( ‘Demandeur’=> array(‘className’=>‘Personne’, ‘foreignKey’=>‘demandeur_id’), ‘PersonneAssigne’=> array(‘className’=>‘Personne’, ‘foreignKey’=>‘personne_assigne_id’) );

  11. Bonjour,

    Je pense qu’il serait intéressant de notifier que les champs “created” et “modified” (ou “updated”) doivent être de type DATETIME, ce n’est pas forcément trivial pour les débutants :)

    Très bon site / article.

  12. A quand la suite ???
    Ce blog est-il mort ?
    Dommage car je le trouve très agréable et il me serait d’une grande utilité :)

Aide Textile