Table des matières

CRUD avec zones

Ce tutoriel provient de la discussion d'un des forums de Jelix concernant la pertinence de l'emploi d'une zone ou d'un simple template. Il n'y a pas qu'une seule réponse puisque trop de variables modèlisent la réponse:

Cet article tiendra compte, au moins en partie je l'espère, de toutes ces variables. Aussi, une grande part des choix effectués est subjective. C'est le choix d'un programmeur qui tend vers la perfection mais ne l'attend jamais.

Vous pouvez télécharger le code de ce tutorial directement de la forge à l'adresse suivante: pour le format zip et pour le format tar.gz.

Le fichier contient une application nommée myapp. Attention pour ne pas écraser une autre application qui aurait le même nom.

Pré-requis

ATTENTION, mise à jour : ce tutoriel est assez vieux, et n'utilise pas le controlleur jControllerDaoCrud fourni depuis jelix 1.0Beta3.1 qui simplifie beaucoup la tâche (Voir l'autre tutoriel).

Il est donc à l'origine prévu pour fonctionner avec les versions de dévelopement de jelix 1.0 beta3. Il vous faudra faire certainement quelques adaptations pour qu'il fonctionne avec jelix 1.0.

Vous devez avoir fait le Mini tutoriel et le Tutoriel principal ou être à l'aise avec Jelix. Puisque c'est le 3ième tutoriel sur un CRUD, nous vous conseillons fortement la lecture des articles les concernant. Voyez le Tutoriel du jForms et jDao et le CRUD générique de base du manuel de Jelix.

Création de l'application

Veillez suivre la démarche décrite dans l'article Étapes lors de la création d'une application Jelix en tenant compte des informations suivantes:

Nom de l'application : myapp
Nom du module : crudtuto3

basePath = “/jelix/myapp/www” ou selon votre configuration préférée.

Il se peut que cette table existe déjà dans votre base de données, sinon créez là.

 
  CREATE TABLE `news` (
    `id_news` INT(11) NOT NULL AUTO_INCREMENT,
    `sujet` VARCHAR(255) NOT NULL,
    `texte` text NOT NULL,
    `news_date` DATE NOT NULL,
    PRIMARY KEY  (`id_news`)
  ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 

Ressource jDao : crudtuto3~news
Fichier DAO : news
Table : news

Créez dans le répertoire jelix/myapp/modules/crudtuto3/forms/, le fichier news.form.xml.

  <?xml version="1.0" encoding="utf-8"?>
  <form xmlns="http://jelix.org/ns/forms/1.0">
   <input ref="id_news" >
      <label>Id</label>
   </input>
   <input ref="sujet" >
      <label>Votre sujet</label>
   </input>
   <input ref="texte" >
      <label>Votre texte</label>
   </input>
   <input ref="news_date" >
      <label>Votre date</label>
   </input>
  </form>

Notes sur l'application à réaliser

Dans un premier temps nous allons créer une réponse personnalisée

Nous allons créer une classe de services pour le CRUD

Nous allons créer 4 zones avec paramètres

Nous allons créer une classe générique du CRUD

Il faut une classe d'utilisation

La réponse HTML

Le but de créer une réponse HTML personnalisée est de généraliser dans l'application :

Voyez le contenu du fichier jelix/myapp/responses/myHtmlResponse.class.php.

Consultez le manuel pour obtenir plus de détail sur la classe jReponseHTML.

Pour indiquer à Jelix que vous avez créé une réponse personnalisée, vous devez ouvrir le fichier jelix/myapp/var/config/index/config.ini.php et ajouter dans la section [responses] la ligne suivante:

html = myhtmlResponse

Création d'une classe de services pour le CRUD

Dans ce tutoriel, cette classe métiers ou de services contient peu de fonctions. Mais dans d'autres applications, elle pourrait être très utile en réduisant la duplication du code. Et même cette classe pourrait être appelée par d'autres types de reponses.

Par exemple, personnellement je préfère utiliser un jDb pour browser les news. Parce que je peux faire un select avec 2 champs. C'est mon choix subjectif. Je pourrais rajouter cette fonction dans ma classe de services tout en gardant le browse qui appel le DAO.

Voir le fichier myapp/modules/crudtuto3/classes/crudserviceDAO.class.php.

Consulter le manuel et son article sur les classes métiers.

Création de quatre zones avec paramètres

Les zones ne sont pas génériques mais peuvent être utilisées dans plusieurs actions ou même plusieurs templates directememt.

Ces zones sont accompagnées de leur template.

Puisqu'elles utilisent un dao spécifique, il est recommendé de donner un nom qui représente le dao et l'action. Ainsi si vous utilisez plusieurs fichiers dao dans votre application, vous pourrez les retrouver plus facilement.

Voir les fichiers du répertoire myapp/modules/crudtuto3/zones/ et myapp/modules/crudtuto3/templates/

Consultez le manuel et l'article sur les zones

Création d'une classe générique du CRUD

Cette classe de base et les zones se partagent la logique du CRUD. En fait dans cette classe on retrourve que la logique du save et du delete (destroy). Les autres actions appellent leur zone correspondante pour traiter la logique du CRUD.

Remarquez dans cette classe la façon d'appeler une zone avec paramètres et d'appeler une classe de service. Aussi remarquez l'utilisation du constructeur. La signature doit être la même que sa classe parent jController.

Cette classe est complètement générique grâce à son initialisation dans la classe d'utilisation. Également un template nommé cruderror.tpl est générique.

Voir le fichier myapp/modules/crudtuto3/controllers/baseCrudController.php

Création d'une classe d'utilisation

La classe d'utilisation est notre controleur par défaut et son template principal. Elle hérite du CRUD et ne voie que 3 choses:

  1. la configuration du CRUD
  2. la réponse html ou la redirection créées par le CRUD
  3. une fonction qui permet de faire la distinction entre ces deux réponses.

Le reste est comme une boîte noir. Le développeur peut ne pas s'en occuper.

Voir le fichier myapp/modules/crudtuto3/controllers/default.classic.php

Voir le fichier myapp/modules/crudtuto3/templates/main.tpl

Consultez le manuel et l'article sur les contrôleurs.