Raccourcis : Contenu - rubriques - sous rubriques
FR

Piste : crud-generic-zones

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:

  • La performance (temps de réponse)
  • Réutilisation du code (besoin ou pas besoin)
  • Maintenance (évolution du logiciel est élevé ou pas)
  • Expérience du développeur (débutant ou expert)
  • Respect de normes de développement (individu ou en entreprise)

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

  • ainsi on maximize la réutilisation du code
  • elle peut contenir des services rendus à l'aide des classes jDao ou ou jDb
  • elle n'est pas générique mais est utilisée par plusieurs ressources de Jelix

Nous allons créer 4 zones avec paramètres

  • ainsi on peut maximizer la réutilisation du code
  • elles traiteront en partie de la logique du CRUD
  • elles peuvent récupèrer un service selon selon une action du CRUD.
  • elles traitent les données, si nécessaire
  • elles gèrent 3 templates spécifiques au DAO utilisé (view, browse et edit)
  • ces zones ne sont pas génériques.

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

  • elle créera une réponse html ou une redirection,
  • elle traitera en partie de la logique du CRUD
  • elle récupèrera des services
  • elle insèrera des zones avec paramètres dans le template principal
  • elle gère 1 template générique (cruderror.tpl) qui sert à certaines erreurs.

Il faut une classe d'utilisation

  • elle termine la préparation de l'action du CRUD
  • elle retourne la réponse
  • elle initialisera le classe générique du CRUD
  • elle gère le template principal (main.tpl) et un sous template pour l'action index (index,tpl)

La réponse HTML

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

  • l'utilisation du même thème dans toutes les pages de notre petite application
  • de garantir l'initialisation par défaut de certaines variables
  • et l'utilisation d'un template principal par défaut indépendant du CRUD

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/

  • newsview.zone.php, newsview.tpl
  • newsupdate.zone.php, newsedit.tpl
  • newscreate.zone.php, newsedit.tpl
  • newsbrowse.zone.php, newsbrowse.tpl

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.


fr/tutoriels/crud-generic-zones.txt · Dernière modification : 2012/04/14 19:28 de laurent

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