connect('admin_menu_com.menu_end', 'pm'); function pm() { echo '
  • Nouvel élément
  • '; } // Ajoute un item au menu secondaire $GLOBALS['dispatcher']->connect('admin_news.menu_end', 'sm'); function sm() { echo '| Nouvelle action'; } // Exemple n°1 // Appel à la fonction changingValue() // news.before_datacheck // On change les valeurs passées en arguments avant le traitemant function changingValue(sfEvent $event, $data) { $subject = $event->getSubject(); $params = $event->getParameters(); // logfile(SITE_PATH.'/tmp/news.object.txt',$subject); // objet avant modification logfile(SITE_PATH.'/tmp/news.before.content.txt',$params['data']); _debug('[event/dispatcher] - we run ' . __FUNCTION__ . '() function by filter() call.', 'dispatcher'); _debug('[event/dispatcher] - object : ' . get_class($subject). ' - event name : ' . $event->getName(), 'dispatcher'); $params['data']['2'] = "XXXXXXXXXXXXX modified content XXXXXXXXXXXXX"; // Remplacement du contenu fourni par ce contenu // $data['2'] = ""; // retournera l'erreur "Votre actualité doit impérativement avoir un contenu" // IMPORTANT // L'affichage sur l'UI est en mémoire. Le contenu vu à l'écran n'est donc pas celui contenu dans l'array et prêt à être stocké en base // objet modifié logfile(SITE_PATH.'/tmp/news.after.content.txt',$data); return $data; } // Exemple n°2 // Appel à la fonction notifyTest() // news.after_datacheck function notifyTest(sfEvent $event) { _debug('[event/dispatcher] - we run ' . __FUNCTION__ . '() function by notify() call.', 'dispatcher'); _debug('[event/dispatcher] - object : ' . get_class($event->getSubject()). ' - event name : ' . $event->getName(), 'dispatcher'); _debug('[event/dispatcher] - checkDataIntegrity returns true. All right !', 'dispatcher'); } // Exemple n°3 // Appel à la classe extensibleNews() // pour surcharger la classe news class extensibleNews { static public function listenToMethodNotFound(sfEvent $event) { switch ($event['method']) { case 'doTest': self::doTest($event->getSubject(), $event['arguments']); return true; default: return false; } } static private function doTest($subject, $arguments) { if(is_string($arguments)) $msg = $arguments; if(is_array($arguments)) $msg = join(', ', $arguments); _debug('[event/dispatcher] - we run ' . __FUNCTION__ . '() function by extensibleFunc() call with arguments : '. $msg, 'dispatcher'); } } // Log de l'authentification dans [path to app]/tmp - Exemple n°4 function logAction(sfEvent $event) { $a[0]= $event['login']. " s'est authentifé le ".date('d/n/Y à H:i:s')." depuis ". $event['type']; logfile(SITE_PATH.'/tmp/log_auth.txt', $a); } // Exemple n°1 $dispatcher->connect('news.before_datacheck', 'changingValue'); // Exemple n°2 $dispatcher->connect('news.after_datacheck', 'notifyTest'); // Exemple n°3 // Extension de classe avec le système Event/eventDispatcher $dispatcher->connect('news.extensible_function', array('extensibleNews', 'listenToMethodNotFound')); // Test conditionnel sur la section 'news' // pour appeler une nouvelle méthode définie ici (extensibleNews) if(isset($_REQUEST['rub']) && $_REQUEST['rub'] == 'news') { include_once '../class/class.news.php'; $n = new news; $n->doTest('arg 1', 'arg 2', 'arg 3'); } // Exemple n°4 // Rien à voir avec l'actualité : on log les utilisateurs qui s'authentifient $dispatcher->connect('auth.logIn', 'logAction'); ?>