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.

2 réponses


Digikube
Auteur

J'ai du nouveau peut être plus propre au niveau du code mais il me manque une info que je ne comprend pas dans la doc.

J'en suis au fait d'envoyer un paramètre au système d'évènement de la façon suivante :

$this->getEventManager()->dispatch(new CakeEvent('Model.Annonceur.afterUpdate', $this, $PARAMETRES));

de tel sorte à pouvoir l'utiliser dans mon Listener de cette manière :

public function ajouterJoueur($PARAMETRES){
        #Mon code...
    }

Or je souhaite récupérer un des deux paramètres que je passe dans l'url en théorie dans un controller j'aurais fait :

public function ajouterJoueur($PARAM1, $PARAM2){
    #Mon code...
}

Comment puis-je récupérer ces paramètres dans mon model dans le afterSave() pour pouvoir les envoyer à mon Listener ?

Digikube
Auteur

Une idée ?