Piste :
Différences ¶
Ci-dessous, les différences entre deux révisions de la page.
| fr:tutoriels:jelixnews-1.7:utiliser-dao [2011/05/24 16:41] – modification externe 127.0.0.1 | fr: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' | + | Le pattern DAO se base sur deux types d' |
| + | des données (représentant un enregistrement), | ||
| + | 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' | + | 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' | ||
| + | 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), | + | À 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), | ||
| + | méthodes et requêtes SQL principales **en dur**. En effet, contrairement à | ||
| + | d' | ||
| + | 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' | + | Dans le fichier XML de DAO, vous pouvez aussi définir vos propres méthodes |
| + | d' | ||
| + | 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 // | + | module: |
| - | Nous avons précédemment créé une table news, et nous allons créer un DAO appelé " | + | |
| + | Nous avons précédemment créé une table "news", et nous allons créer un DAO | ||
| + | appelé " | ||
| <code bash> | <code bash> | ||
| - | | + | |
| </ | </ | ||
| - | Vous obtenez alors un fichier @@F@actu.org/ | + | Vous obtenez alors un fichier @@F@actu.org/ |
| + | (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: | ||
| </ | </ | ||
| - | C'est un contenu très simple, et bien sûr il existe d' | + | C'est un contenu très simple, et bien sûr il existe d' |
| - | + | balises pour l' | |
| - | + | 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:: | + | 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:: | ||
| <code php> | <code php> | ||
| Ligne 57: | Ligne 75: | ||
| </ | </ | ||
| - | En paramètre de @@M@jDao:: | + | En paramètre de @@M@jDao:: |
| + | nom " | ||
| + | factory de ce DAO. et en appelant la méthode @@M@findAll()@@, | ||
| + | toute la liste des records. | ||
| - | En fait, il ne s'agit pas vraiment d'une liste, mais d'un objet @@C@jDbResultSet@@, | + | 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() { | ||
| - | | + | |
| + | | ||
| // on définit un titre de page | // on définit un titre de page | ||
| $rep-> | $rep-> | ||
| Ligne 72: | Ligne 96: | ||
| $tpl = new jTpl(); | $tpl = new jTpl(); | ||
| + | // on récupère les enregistrements | ||
| $fact = jDao:: | $fact = jDao:: | ||
| $liste = $fact-> | $liste = $fact-> | ||
| Ligne 81: | Ligne 106: | ||
| $rep-> | $rep-> | ||
| - | | + | |
| } | } | ||
| </ | </ | ||
| - | On donne la liste des enregistrement à notre template spécifique à l' | + | On donne la liste des enregistrement à notre template spécifique à l' |
| + | via une variable de template grâce à la méthode @@M@assign@@. Modifions notre | ||
| + | template spécifique @@F@listenews.tpl@@ : | ||
| < | < | ||
| Ligne 99: | Ligne 126: | ||
| </ | </ | ||
| - | 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 |
| + | 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' | + | La liste renvoyée par @@M@findAll@@ est une liste d' |
| + | sont définis dans le fichier XML. Ils ont donc les propriétés @@P@id_news@@, | ||
| + | @@P@sujet@@, | ||
| Affichez à nouveau la page avec : | Affichez à nouveau la page avec : | ||
| - | | + | |
| Vous devriez voir la liste des news. | Vous devriez voir la liste des news. | ||
| - | Remarque : si vous avez des problèmes d' | + | Remarque : si vous avez des problèmes d' |
| + | mettre @@force_encoding=on@@ dans le fichier @@F@profiles.ini.php@@. | ||

