J'aurais besoin d'une précision pour les évènement système sous CakePHP.
J'ai mis en place une série de fonctions qui vont tirer au sort des annonceurs notamment dans mon application après la création d'un tirage.
J'ai donc utilisé les évènement (je me suis basé sur le tutoriel Events de Grafikart).
J'ai réussi a faire fonctionné mes évènements de la façon suivante :
Dans mon modèle Tirage.php :
public function afterSave($created){
if ($created) {
$this->getEventManager()->dispatch(new CakeEvent('Model.Draw.afterCreate', $this));
}else{
$this->getEventManager()->dispatch(new CakeEvent('Model.Draw.afterUpdate', $this));
}
}
Dans mon contrôleur TiragesController.php:
public function admin_create() {
App::uses('ProcessingEventListener', 'Event');
$this->Tirage->getEventManager()->attach(new ProcessingEventListener);
if ($this->request->is('post')) {
$annonceur= $this->Tirage->Annonceur->find('all',array('conditions' => array('Annonceur.draws >' => '0')));
if(count($annonceur) >= 5){
$this->Tirage->create();
if ($this->Tirage->save($this->request->data)) {
$this->Session->setFlash("Le tirage a été créé.", 'success');
$this->redirect(array('controller' => 'draws', 'action' => 'index', 'admin' => true));
} else {
$this->Session->setFlash("Le tirage n'a pas pu être créé. Essayez à nouveau.", 'error');
}
}
else{
$this->Session->setFlash("Il n'y a pas assez d'annonceurs pour créer un tirage.", 'error');
}
}
}
Mon problème se pose maintenant je souhaite reproduire ce fonctionnement lorsque j'ai un enregistrement dans ma table d'association entre les Joueurs et les Tirages j'ai donc mon fichier JoueursTirage.php avec la fonction afterSave() comme suit :
public function afterSave($created){
if ($created) {
$this->getEventManager()->dispatch(new CakeEvent('Model.JoueursTirage.afterCreate', $this));
}
}
Cependant je souhaite l'appeler depuis le contrôleur TiragesController.php j'ai donc fais ceci :
App::uses('ProcessingEventListener', 'Event');
$this->Tirage->JoueursTirage->getEventManager()->attach(new ProcessingEventListener);
Mais ca ne fonctionne pas : le comportement souhaiter serait qu'a chaque fois qu'un joueur s'inscrit dans un tirage autrement a chaque fois qu'une association se crée je veut lancer mon évènement.