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');
?>