IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Comprendre l'écouteur d'évènement


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2023
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Comprendre l'écouteur d'évènement
    Bonjour à tous,

    Avec symfony 6.3 et php 8.2

    J'ai crée un évènement personnalisé*:


    use Symfony\Contracts\EventDispatcher\Event;

    class MyEvent extends Event
    {
    private $message;

    public function __construct(string $message)
    {
    $this->message = $message;
    }

    public function getMessage(): string
    {
    return $this->message;
    }
    }


    un controller chargé de déclencher l'évènement:

    namespace App\Controller;

    use App\Event\MyEvent;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\EventDispatcher\EventDispatcherInterface;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

    class MyController extends AbstractController
    {

    #[Route("/test")]

    public function myAction(EventDispatcherInterface $dispatcher):Response
    {

    // Créez une instance de votre événement
    $event = new MyEvent('Hello, world!');

    // Déclenchez votre événement
    $dispatcher->dispatch($event);

    return new Response($event->getMessage());
    }
    }


    Un écouteur:

    namespace App\EventListener;

    use App\Event\MyEvent;
    use Psr\Log\LoggerInterface;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;


    class MyListener
    {
    private $logger;


    public function __construct(LoggerInterface $logger)
    {
    $this->logger = $logger;
    }


    public function onMyEvent(MyEvent $event)
    {
    // Récupérez le message de l'événement et enregistrez-le dans les journaux
    //$this->logger->info($event->getMessage());
    var_dump("ok");

    }

    }


    Enfin enregistré le service en tant qu'écouteur dans services.yaml


    App\EventListener\MyListener:
    tags:
    - { name: kernel.event_listener, event: my.event, method: onMyEvent }


    Le résultat m'affiche "Hello world" (c'est logique) mais à aucun moment je n'affiche "ok". J'ai l'impression que la méthode onMyEvent n'est jamais appelée.

    Je suis débutant, pouvez-vous m'aider svp.

  2. #2
    Membre du Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mars 2023
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2023
    Messages : 31
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Il semble que vous ayez correctement défini votre événement personnalisé MyEvent, votre contrôleur MyController et votre écouteur MyListener. Cependant, il y a un problème dans la configuration de votre service en tant qu'écouteur d'événement.

    Dans votre fichier services.yaml, vous avez défini l'écouteur avec l'étiquette kernel.event_listener et l'événement my.event. Cependant, dans votre code, vous n'avez pas défini un événement nommé my.event.

    Pour que votre écouteur soit appelé, vous devez spécifier l'événement réel que vous souhaitez écouter. Dans votre cas, vous souhaitez écouter l'événement MyEvent. Ainsi, vous devez modifier la configuration de votre écouteur comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    App\EventListener\MyListener:
        tags:
            - { name: kernel.event_listener, event: 'App\Event\MyEvent', method: onMyEvent }
    Dans cette configuration, l'événement est spécifié avec le chemin complet de la classe MyEvent dans l'espace de noms App\Event.

    Après cette modification, lorsque vous déclencherez l'événement MyEvent, la méthode onMyEvent de votre écouteur MyListener devrait être appelée et afficher "ok" dans la sortie.

    J'espère que cela résout votre problème. N'hésitez pas à poser d'autres questions si nécessaire !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2023
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour ChatGPT

    Etes-vous un humain?

    Merci pour votre réponse. Après correction comme indique , cela génère une erreur

    The definition for "tags" has no class. If you intend to inject this service dynamically at runtime, please mark it as synthetic=true. If this is an abstract definition solely used by child definitions, please add abstract=true, otherwise specify a class to get rid of this error.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/08/2012, 19h22
  2. Réponses: 2
    Dernier message: 22/06/2011, 15h21
  3. Prototypage et écouteur d'évènement
    Par xess91 dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 29/12/2010, 19h57
  4. Passage d'arguments à un écouteur d'événements
    Par JockdiL dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 14/08/2009, 13h35
  5. [POO]Où placer les écouteurs d'évènement utilisateur?
    Par ChriGoLioNaDor dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 03/09/2008, 07h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo