Coder Social home page Coder Social logo

event-dispatcher-tutorial's Introduction

Event dispatcher / subscriber / listener tutorial

created with

> symfony new event-dispatcher-tutorial
> composer require symfony/event-dispatcher  

Dispatch an event

class UserRegisteredEvent extends Event {
    const NAME = 'user.registered';
    protected $user;

    public function __construct(User $user) {
        $this->user = $user;
    }

    public function getUser(): User {
        return $this->user;
    }
}
public function __construct(EventDispatcherInterface $dispatcher) {

    $this->dispatcher = $dispatcher;
}

/**
 * @Route("/user", name="user")
 */
public function index(): Response {
    $user = new User();
    $user->name = "John Doe";
    $user->age = 23;

    $this->dispatcher->dispatch(new UserRegisteredEvent($user));

    // ...
}

Subscribe to an event (via EventSubscriber)

class UserEventSubscriber implements EventSubscriberInterface {
    public static function getSubscribedEvents() : array {
        return [
            UserRegisteredEvent::class => 'onRegistered'
        ];
    }

    public function onRegistered(UserRegisteredEvent $event) {
        // TODO Handle event!
    }
}

Listen to an event

class UserEventListener {
    public function onRegistered(UserRegisteredEvent $event) {
        // TODO Handle event!
    }
}
# services.yaml
App\EventListener\UserEventListener:
  tags:
    - { 'name': 'kernel.event_listener', 'event': 'App\Event\UserRegisteredEvent', 'method': 'onRegistered' }

Conclusion

Event listener and subscriber behave the same way.
It's a matter of taste how dealing with events should be configured in your modules and application.

Debugging

check if there is an event listener registered for this event

php bin/console debug:event-dispatcher

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.