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 18:41]
127.0.0.1 modification externe
fr:tutoriels:jelixnews-1.7:utiliser-dao [2019/05/22 22: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 22:19 par laurent
Fils rss des changements récents dans le wiki Creative Commons License