Raccourcis : Contenu - rubriques - sous rubriques
FR

Piste :

Wiki: Plan du site - Derniers changements - Back link

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

fr:tutoriels:jelixnews-1.7:utiliser-dao [2011/05/24 16:41] – modification externe 127.0.0.1fr:tutoriels:jelixnews-1.7:utiliser-dao [2019/05/22 20:19] (Version actuelle) laurent
Ligne 2: Ligne 2:
 Jelix propose un système de mapping relationnel objet, jDao, basé sur le pattern DAO. Jelix propose un système de mapping relationnel objet, jDao, basé sur le pattern DAO.
  
-Le pattern DAO se base sur deux types d'objets : un objet "record", contenant des données (représentant un enregistrement), et un objet "factory", qui permet de récupérer des listes de records, ou de créer, sauver, effacer des records.+Le pattern DAO se base sur deux types d'objets : un objet "record", contenant 
 +des données (représentant un enregistrement), et un objet "factory", qui permet 
 +de récupérer des listes de records, ou de créer, sauver, effacer des records.
  
-Concrètement avec jDao, un fichier XML DAO vous permet de définir un record et une factory, qui agiront sur une ou plusieurs tables en même temps. Vous y définissez donc le mapping : quel champs de la table ira dans quelle propriété du record, ainsi que le type de donnée, les clés, sur quelles tables s'effectue le mapping, selon quelles jointures, etc...+Concrètement avec jDao, un fichier XML DAO vous permet de définir un record et 
 +une factory, qui agiront sur une ou plusieurs tables en même temps. Vous y 
 +définissez donc le mapping : quel champs de la table ira dans quelle propriété 
 +du record, ainsi que le type de donnée, les clés, sur quelles tables s'effectue 
 +le mapping, selon quelles jointures, etc...
  
-À partir de ce fichier, jDao génère à la volée deux classes basées respectivement sur jDaoRecordBase et jDaoFactoryBase (qui sont stockées dans un fichier PHP dans le cache de Jelix),  dans lesquelles sont fournies toutes les méthodes et requêtes SQL principales **en dur**. En effet, contrairement à d'autres systèmes de mapping, les requêtes SQL sont donc générées une seule fois, et non pas dynamiquement à chaque appel de pages. Cela permet de meilleures performances.+À partir de ce fichier, jDao génère à la volée deux classes basées 
 +respectivement sur jDaoRecordBase et jDaoFactoryBase (qui sont stockées dans un 
 +fichier PHP dans le cache de Jelix),  dans lesquelles sont fournies toutes les 
 +méthodes et requêtes SQL principales **en dur**. En effet, contrairement à 
 +d'autres systèmes de mapping, les requêtes SQL sont donc générées une seule 
 +fois, et non pas dynamiquement à chaque appel de pages. Cela permet de 
 +meilleures performances.
  
-Dans le fichier XML de DAO, vous pouvez aussi définir vos propres méthodes d'accès aux données, et jDao générera les méthodes et requêtes correspondantes dans la factory du DAO.+Dans le fichier XML de DAO, vous pouvez aussi définir vos propres méthodes 
 +d'accès aux données, et jDao générera les méthodes et requêtes correspondantes 
 +dans la factory du DAO.
  
  
 ===== Créer un premier DAO ===== ===== Créer un premier DAO =====
  
-Vous disposez d'une commande pour créer un fichier DAO, basé sur une table existante. Elle a la syntaxe suivante :+Vous disposez d'une commande pour créer un fichier DAO, basé sur une table 
 +existante. Elle a la syntaxe suivante :
  
-   createdao //nom_module// //nom_dao// //nom_table//+   module:create-dao [options] [--] <module> <daoname> [<table>] [<sequence>]
  
-Nous avons précédemment créé une table news, et nous allons créer un DAO appelé "news", dans le module "news". Tapez donc :+ 
 +Nous avons précédemment créé une table "news", et nous allons créer un DAO 
 +appelé "news", dans le module "news". Tapez donc :
  
 <code bash> <code bash>
-   php cmd.php createdao news news news+   php dev.php module:create-dao news news news
 </code> </code>
  
-Vous obtenez alors un fichier @@F@actu.org/modules/news/daos/news.dao.xml@@. (vous pouvez bien sûr aussi le créer à la main).+Vous obtenez alors un fichier @@F@actu.org/modules/news/daos/news.dao.xml@@. 
 +(vous pouvez bien sûr aussi le créer à la main).
  
 Son contenu est le suivant : Son contenu est le suivant :
Ligne 42: Ligne 60:
 </code> </code>
  
-C'est un contenu très simple, et bien sûr il existe d'autres attributs et balises pour l'enrichir et le personnaliser. Pour l'instant, nous allons nous en tenir là. +C'est un contenu très simple, et bien sûr il existe d'autres attributs et 
- +balises pour l'enrichir et le personnaliser. Pour l'instant, nous allons 
- +nous en tenir là.
- +
  
 ===== Lister les news ===== ===== Lister les news =====
  
-Nous allons maintenant utiliser ce DAO pour récupérer la liste des news. Nous allons donc demander à jDao la factory de ce DAO, et appeler sa méthode @@M@findAll()@@ prédéfinie. Pour ce faire, on fait appel à @@M@jDao::get()@@ :+Nous allons maintenant utiliser ce DAO pour récupérer la liste des news. 
 +Nous allons donc demander à jDao la factory de ce DAO, et appeler sa 
 +méthode @@M@findAll()@@ prédéfinie. Pour ce faire, on fait appel à @@M@jDao::get()@@ :
  
 <code php> <code php>
Ligne 57: Ligne 75:
 </code> </code>
  
-En paramètre de @@M@jDao::get()@@, on donne le sélecteur du DAO (qui a pour nom "news", et dans le module news) : "news~news". Elle nous renvoie la factory de ce DAO. et en appelant la méthode @@M@findAll()@@, on récupère toute la liste des records.+En paramètre de @@M@jDao::get()@@, on donne le sélecteur du DAO (qui a pour 
 +nom "news", et dans le module news) : "news~news". Elle nous renvoie la 
 +factory de ce DAO. et en appelant la méthode @@M@findAll()@@, on récupère 
 +toute la liste des records.
  
-En fait, il ne s'agit pas vraiment d'une liste, mais d'un objet @@C@jDbResultSet@@, qui est un itérateur sur les résultats de la requête correspondante.+En fait, il ne s'agit pas vraiment d'une liste, mais d'un objet @@C@jDbResultSet@@, 
 +qui est un itérateur sur les résultats de la requête correspondante.
  
 Intégrons ça dans notre contrôleur : Intégrons ça dans notre contrôleur :
Ligne 65: Ligne 87:
 <code php> <code php>
     function index() {     function index() {
-        $rep = $this->getResponse('html');+ 
 +      $rep = $this->getResponse('html'); 
       // on définit un titre de page       // on définit un titre de page
       $rep->title = 'Dernières actualités';       $rep->title = 'Dernières actualités';
Ligne 72: Ligne 96:
       $tpl = new jTpl();       $tpl = new jTpl();
  
 +      // on récupère les enregistrements
       $fact = jDao::get('news~news');       $fact = jDao::get('news~news');
       $liste = $fact->findAll();       $liste = $fact->findAll();
Ligne 81: Ligne 106:
       $rep->body->assign('MAIN', $tpl->fetch('listenews'));       $rep->body->assign('MAIN', $tpl->fetch('listenews'));
  
-        return $rep;+      return $rep;
     }     }
 </code> </code>
  
-On donne la liste des enregistrement à notre template spécifique à l'action, via une variable de template grâce à la méthode @@M@assign@@. Modifions notre template spécifique @@F@listenews.tpl@@ :+On donne la liste des enregistrement à notre template spécifique à l'action, 
 +via une variable de template grâce à la méthode @@M@assign@@. Modifions notre 
 +template spécifique @@F@listenews.tpl@@ :
  
 <code> <code>
Ligne 99: Ligne 126:
 </code> </code>
  
-Vous découvrez ici le tag de template {foreach}, qui fonctionne exactement comme  le foreach php. Pour afficher des valeurs, il suffit de mettre le nom de la variable de template précédé par un //$//, et encadré par des accolades.+Vous découvrez ici le tag de template @@{foreach}@@, qui fonctionne exactement comme 
 +le foreach php. Pour afficher des valeurs, il suffit de mettre le nom de la 
 +variable de template précédé par un @@$@@, et encadré par des accolades.
  
-La liste renvoyée par @@M@findAll@@ est une liste d'objets record, tels qu'ils sont définis dans le fichier XML. Ils ont donc les propriétés @@P@id_news@@, @@P@sujet@@, @@P@texte@@ et @@P@news_date@@.+La liste renvoyée par @@M@findAll@@ est une liste d'objets record, tels qu'ils 
 +sont définis dans le fichier XML. Ils ont donc les propriétés @@P@id_news@@, 
 +@@P@sujet@@, @@P@texte@@ et @@P@news_date@@.
  
 Affichez à nouveau la page avec : Affichez à nouveau la page avec :
  
-   http://localhost/actu.org/www/index.php/news/+   http://localhost:8080/index.php/news/
  
 Vous devriez voir la liste des news. Vous devriez voir la liste des news.
  
-Remarque : si vous avez des problèmes d'affichage des accents, essayez de mettre @@force_encoding=on@@ dans le fichier @@F@profiles.ini.php@@.+Remarque : si vous avez des problèmes d'affichage des accents, essayez de 
 +mettre @@force_encoding=on@@ dans le fichier @@F@profiles.ini.php@@.
  
fr/tutoriels/jelixnews-1.7/utiliser-dao.txt · Dernière modification : 2019/05/22 20:19 de laurent
Fils rss des changements récents dans le wiki Creative Commons License