Section: Évènements automatiques
« Développer des méthodes en php | ^ jDao : mapping objet relationnel |
− Table des matières
Une factory de DAO peut générer automatiquement des évènements pour certains types de méthodes lors de leur appel.
Évènements des méthodes natives ¶
Les méthodes update
, insert
, delete
et deleteby
peuvent générer des évènements,
soit avant la fonction, soit après la fonction, soit avant et après. Pour les
activer, il faut indiquer les évènements voulus dans l'attribut events
de la
balise <factory>
. Ils doivent être séparés par une virgule. Les noms possibles
sont : deletebefore
, deleteafter
, updatebefore
, updateafter
,
insertbefore
, insertafter
, deletebybefore
, deletebyafter
.
Voici les noms des évènements générés avec les noms de leurs paramètres, sachant
qu'ils ont tous un paramètre dao
qui contient le sélecteur du dao.
daoDeleteBefore
:keys
(valeurs des clés du record à supprimer)daoDeleteAfter
:keys
,result
(1 si l'enregistrement est supprimé)daoDeleteByBefore
:keys
,criterias
(objet jDaoConditions)daoDeleteByAfter
:keys
,criterias
,result
(nombre d'enregistrements supprimés)daoUpdateBefore
:record
(objet record à mettre à jour)daoUpdateAfter
:record
daoInsertBefore
:record
daoInsertAfter
:record
Voici un exemple :
Fichier Dao ¶
Il faut ajouter la propriété events
à la balise <factory>
. Il ne faut
pas mettre de majuscules dans le nom des événements.
<factory events="deleteafter, insertafter"> ...
Listener ¶
Dans le répertoire classes du module, créer un fichier my.listener.php
afin de
mettre les répondeurs aux évènements à exécuter:
class myListener extends jEventListener{
function onDaoDeleteAfter ($event) {
$dao = $event->getParam('dao');
if ($dao == 'mymodule~thedao') {
$keys = $event->getParam('keys');
//...
}
}
}
Si vous désirez modifier la propriété maPropriete
de votre dao, il vous suffit
$event->getParam("record")->maPropriete = $Variable;
Fichier events.xml ¶
Il faut un fichier events.xml
dans le répertoire racine du module. Dans ce
fichier seront déclarées toutes les méthodes du listener. Exemple :
<events xmlns="http://jelix.org/ns/events/1.0">
<listener name="my">
<event name="daoInsertAfter" />
<event name="daoDeleteAfter" />
</listener>
</events>
Évènements des méthodes personnalisées ¶
Pour les méthodes personnalisées (celles que vous décrivez en XML), et
uniquement les méthodes de type update ou delete, vous pouvez indiquer
l'attribut eventbefore
, et/ou eventafter
qui doivent contenir true
ou
false
.
Les évènements générés sont alors daoSpecificUpdateBefore
,
daoSpecificUpdateAfter
, daoSpecificDeleteBefore
et daoSpecificDeleteAfter
.
Ils ont pour paramètre :
dao
, contenant le sélecteur du dao concernémethod
, le nom de la méthodeparams
, contenant la liste des paramètres.