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@@. | ||