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.
É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 évenements à exécuter
class myListener extends jEventListener{
function onDaoDeleteAfter ($event) {
$dao = ;
if ($event->getParam('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éthode
- params, contenant la liste des paramètres.