Raccourcis : Contenu - rubriques - sous rubriques
EN FR

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éthode
  • params, contenant la liste des paramètres.