Une application scaffolding (échafaudage en Français) est une technique permettant au développeur de définir et créer une application qui peut construire, afficher, modifier et détruire facilement des objets. Le Scaffolding dans CakePHP permet également aux développeurs de définir comment les objets sont liés entre eux, et de créer ou casser ces liens.
Pour créer un scaffold, vous n’avez besoin que d’un modèle et de son
contrôleur. Déclarez la variable $scaffold
dans le contrôleur, et
l’application est déjà prête à tourner !
Le scaffolding par CakePHP est vraiment bien imaginé. Il vous permet de mettre en place une application basique CRUD (Création, Vue, Edition et Destruction) en quelques minutes. Il est si bien fait que vous aurez envie de l’utiliser dans toutes vos applications. Attention ! Nous pensons aussi que le scaffolding est utile, mais veuillez réaliser que ce n’est… qu’un échaufaudage ! C’est une structure très simple à mettre en oeuvre, et il vaut mieux ne l’utiliser qu’au début d’un projet. Il n’a pas été conçu pour être flexible, mais uniquement pour être un moyen temporaire de mettre en place votre application. A partir du moment où vous voudrez adapter les fonctions et les vues associées, il vous faudra désactiver le scaffolding et écrire votre propre code. La console CakePHP bake, que vous pourrez apprendre à connaître dans la prochaine section, est une bonne alternative : il va générer tout le code équivalent à ce que ferait le scaffolding.
Le Scaffolding est à utiliser au tout début du développement d’une application Internet. Le schéma de votre base de données est encore susceptible de changer, ce qui est tout à faire normal à ce stade du processus de création. Ca a un inconvénient : un développeur déteste créer des formulaires dont il ne verra jamais l’utilisation réelle. C’est pour réduire le stress du développeur que le Scaffolding a été introduit dans CakePHP. Il analyse les tables de votre base et crée de façon simple une liste des enregistrements, avec les boutons d’ajout, de suppression et de modification, des formulaires pour l’édition et une vue pour afficher un enregistrement en particulier.
Pour ajouter le Scaffolding dans votre application, ajoutez la
variable $scaffold
dans votre contrôleur :
<?php
class CategoriesController extends AppController {
var $scaffold;
}
?>
En supposant que vous avez bien crée un modèle Category dans le bon dossier (/app/models/category.php), vous pouvez aller sur http://example.com/categories pour voir votre nouveau scaffold.
Créer des méthodes dans un contrôleur contenant la variable
$scaffold
peut donner des résultats inattendus. Par exemple, si vous
créez une méthode index() dans ce contrôleur, votre méthode remplacera
celle rendue normalement par la fonctionnalité de scaffold
Le Scaffolding prend bien en compte les relations contenues dans votre
modèle. Ainsi, si votre modèle Category a une relation BelongsTo avec le
modèle Utilisateur, vous verrez les identifiants des utilisateurs dans
l’affichage de vos catégories. Si vous préférez voir autre chose en plus
des identifiants (par exemple les prénoms des utilisateurs), vous pouvez
affecter la variable $displayField
dans le modèle.
Voyons comme définir la variable $displayField
dans la classe des
utilisateurs, afin que le prénom soit montré en lieu et place de
l’unique identifiant. Cette astuce permet de rendre le scaffolding
plus lisible dans de nombreux cas.
<?php
class Utilisateur extends AppModel {
var $name = 'Utilisateur';
var $displayField = 'prenom';
}
?>
Si vous avez activé le routage admin dans votre app/config/core.php,
avec Configure::write('Routing.prefixes', array('admin'));
vous
pouvez utiliser le scaffolding (échafaudage) pour générer une
interface d’administration.
Une fois que vous avez activé le routage admin, assignez votre préfixe d’administration à la variable de scaffolding.
var $scaffold = 'admin';
Vous serez maintenant capable d’accéder aux actions scaffoldées :
http://example.com/admin/controleur/index
http://example.com/admin/controleur/view
http://example.com/admin/controleur/edit
http://example.com/admin/controleur/add
http://example.com/admin/controleur/delete
C’est une méthode facile pour créer rapidement une interface d’administration simple. Gardez à l’esprit que vous ne pouvez pas avoir de méthodes de scaffolding à la fois dans la partie admin et dans la partie non-admin en même temps. Comme avec le scaffolding normal, vous pouvez surcharger les méthodes individuelles et les remplacer par vos propres méthodes.
function admin_view($id = null) {
//code personnalisé ici
}
Une fois que vous avez remplacé une action de scaffolding, vous devrez créer une vue pour cette action.
Si vous désirez un rendu un peu différent de vos vues obtenues par le Scaffolding, vous pouvez créer des mises en pages personnalisées. Nous continuons de vous recommander de ne pas utiliser cette technique pour produire vos sites, mais pouvoir modifier les vues peut être utile pour leur développement.
La personnalisation peut être obtenue en créant des templates.
Les vues de scaffolding personnalisées pour un contrôleur spécifique (MessagesController dans cet exemple) doivent être agencées comme ceci :
/app/views/messages/scaffold.index.ctp
/app/views/messages/scaffold.show.ctp
/app/views/messages/scaffold.edit.ctp
/app/views/messages/scaffold.new.ctp
Les vues de scaffolding personnalisées pour tous les contrôleurs doivent être agencées comme ceci :
/app/views/scaffolds/index.ctp
/app/views/scaffolds/show.ctp
/app/views/scaffolds/edit.ctp
/app/views/scaffolds/new.ctp
/app/views/scaffolds/add.ctp