Raccourcis : Contenu - rubriques - sous rubriques
FR

Piste : crud

Nous avons vu dans un chapitre précédent, comment créer un formulaire simple. Cependant nous n'avons pas realisé tout ce qu'une interface d'administration de donnée exige : vérification de la saisie, affichage des erreurs, affichage d'une liste de news avec des liens pour modifier, suppression, modification etc…

Ce sont souvent des développements rébarbatifs, aussi Jelix propose une solution : un système de formulaire jForms, et un contrôleur générique pour faire du CRUD (Create/Read/Update/Delete).

Création du formulaire jForms

On va d'abord créer un formulaire jForms. Il s'agit d'un fichier XML dans lequel on liste tout les champs de saisie du formulaire, ainsi que leur libellé, les éventuelles contraintes sur leur contenu etc..

Il existe une commande jelix-scripts qui permet de créer un formulaire jForms à partir d'un DAO, et ça tombe bien, nous avons déjà un DAO pour les news. Dans le répertoire de l'application, tapez la commande suivante :

php dev.php module:create-form news newsform news

createform prend trois arguments :

  1. le nom du module,
  2. le nom du futur formulaire,
  3. le nom du DAO.

Nous obtenons alors dans le fichier actu.org/modules/news/forms/newsform.form.xml :

<?xml version="1.0" encoding="utf-8"?>
<form xmlns="http://jelix.org/ns/forms/1.1">
 
 <input ref="sujet" required="true" maxlength="255">
   <label>Sujet</label>
 </input>
 
  <textarea ref="texte" required="true">
    <label>Texte</label>
  </textarea>
 
  <input ref="news_date" required="true" type="date">
    <label>News Date</label>
  </input>
 
  <submit ref="_submit">
    <label>ok</label>
  </submit>
</form>

La commande génère un formulaire très basique qu'il faut la plupart du temps adapter car le script ne peut pas tout deviner. Ici par exemple, il va falloir indiquer des libellés plus parlant. Dans d'autre cas, il vous faudra certainement changer le type de champs de saisie,etc.

Changeons les libellés, indiquons que tous les champs sont obligatoires et ajoutons une petite aide pour la date :

<?xml version="1.0" encoding="utf-8"?>
<form xmlns="http://jelix.org/ns/forms/1.1">
 
 <input ref="sujet" required="true" maxlength="255">
   <label>Sujet de la news</label>
 </input>
 
  <textarea ref="texte" required="true">
    <label>Contenu</label>
  </textarea>
 
  <input ref="news_date" required="true" type="date">
    <label>Date</label>
    <hint>Le format de la date est aaaa-mm-jj</hint>
  </input>
 
  <submit ref="_submit">
    <label>ok</label>
  </submit>
</form>

Notre formulaire est prêt à être traité. On devrait utiliser l'API de jForms pour le manipuler, mais dans notre tutoriel, le contrôleur générique va le faire pour nous.

Création du contrôleur CRUD

Créons le fichier modules/news/controllers/admin.classic.php, et commençons à y écrire un contrôleur pour faire une gestion de news :

<?php
 
class adminCtrl extends jControllerDaoCrud {
 
}
 
?>

Le contrôleur n'hérite pas de jController, mais de jControllerDaoCrud. C'est un contrôleur qui contient un ensemble d'actions prédéfinies. Il suffit alors de compléter certaines informations dans ses propriétés pour que la gestion des news soit opérationnelle.

En principe, dans un premier temps, indiquer le dao et le formulaire à utiliser suffit :

<?php
 
class adminCtrl extends jControllerDaoCrud {
 
    protected $dao = 'news~news';
 
    protected $form = 'news~newsform';
 
}
 
?>

Lancez maintenant dans votre navigateur : http://localhost:8080/index.php/news/admin/.

Vous devriez obtenir une liste de news avec des liens pour les voir, un lien pour créer un nouvel enregistrement etc.. Bref, une véritable gestion opérationnelle des news.

Personnaliser le contrôleur CRUD

Si on veut changer des propriétés de la réponse HTML par défaut, qui, dans notre cas, est la classe myHtmlResponse, il faut redéfinir la méthode _getResponse, spécifique à jControllerDaoCrud. On va ici indiquer un titre de page.

<?php
 
class adminCtrl extends jControllerDaoCrud {
 
    protected $dao = 'news~news';
    protected $form = 'news~newsform';
 
    protected function _getResponse(){
        $rep = $this->getResponse('html');
        $rep->title = "Gestion des news";
        return $rep;
    }
}
?>

On peut aussi redéfinir les templates pour chaque page du contrôleur CRUD. Par défaut, le contrôleur CRUD utilise ceux fourni par le module jelix. Par exemple, créons un template pour la liste des news. Recopions le template vendor/jelix/jelix/lib/jelix/core-modules/jelix/templates/crud_list.tpl dans actu.org/modules/news/templates et changeons par exemple le titre en <h1>:

<h1>Gestion des news</h1>
...

On va ensuite indiquer ce template au contrôleur:

<?php
 
class adminCtrl extends jControllerDaoCrud {
 
    protected $dao = 'news~news';
    protected $form = 'news~newsform';
 
    protected $listTemplate = 'news~crud_list';
...
}
?>

Maintenant vous pouvez relancer http://localhost:8080/index.php/news/admin/, et vous devriez voir votre nouveau template.

Pour personnaliser encore plus, voir le chapitre sur le contrôleur CRUD dans le manuel.

Note

Nous avions créé le formulaire, le dao et le contrôleur CRUD séparément, mais il est possible en une seule ligne de commande de créer ces trois fichiers directement :

  php dev.php module:create-dao-crud <module> <table> [<ctrlname>]
 
  # soit :
 
  php dev.php module:create-dao-crud news news admin

Et ensuite, on peut directement appeler la page correspondante http://localhost:8080/index.php/news/admin/ pour voir le résultat.

fr/tutoriels/jelixnews-1.7/crud.txt · Dernière modification : 2019/05/23 09:36 de laurent

Fils rss des changements récents dans le wiki Creative Commons License