PHP code example of phoole / event

1. Go to this page and download the library: Download phoole/event library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

phoole / event example snippets


  use Phoole\Event\Provider;
  use Phoole\Event\Dispatcher;
  use Phoole\Event\Events\StoppableEvent;
  
  // create your own event class
  class MyEvent extends StoppableEvent {
  }
  
  // an invokable class for event handling
  class MyEventHandler
  {
      public function __invoke(MyEvent $event)
      {
           echo 'handling event...';
           return $event; // optional
      }
  } 
  
  // initiate event dispatcher
  $events = new Dispatcher(new Provider());

  // bind a callable with default priority 50 (0-100)
  $provider->attach(function(myEvent $event) {
      echo 'triggered...';
      return $event; // optional
  });
  
  // bind a invokable object with priority 80
  $provider->attach(new MyEventHandler(), 80);

  // fire the trigger, wil see output 'handling event...triggered...'
  $events->dispatch(new MyEvent());
  

  use Phoole\Event\Events\StoppableEvent;
  
  // my own event hierarchy top
  class MyEvent extends StoppableEvent
  {
  }
  
  // my user authentication event
  class MyAuthEvent extends MyEvent
  {
      protected $userInfo;
  
      public function __construct(array $userInfo)
      {
          $this->userInfo = $userInfo;
      }
  
      public function getUserInfo(): array
      {
          return $this->userInfo;
      }
  }
  
  $provider = new Provider();
  $events = new Dispatcher($provider);
  
  // attach a listener to the event hierarchy top
  $provider->attach(function(MyEvent $event) {
      echo 'Event '.get_class($event).' fired';
      return $event; // optional
  });
  
  // attach a listener for logging users
  $provider->attach(function(MyAuthEvent $event)) use ($logger) {
      $logger->info(sprintf("User '%s' logged", $event->getUserInfo()['name']));
      return $event; // optional
  });
  
  ...

  // upon user logged in, trigger the event
  // BOTH listeners will process THIS event
  $events->dispatcher(new MyAuthEvent($userInfo));
  

  use Phoole\Event\ListenerCapableTrait;
  use Phoole\Event\ListenerCapableInterface;

  // my listener class
  class MyListener implements ListenerCapableInterface
  {
      use ListenerCapableTrait;
  
      // define on listener method
      public function MethodOne(MyEvent $event)
      {
           echo 'handling MyEvent in MethodOne...';
      }
      
      // define another listener method
      public function MethodTwo(MyEvent $event)
      {
          echo 'handling MyEvent in MethodTwo...';
      }
  
      // config this listener
      protected function eventsListening()
      {
          return [
              'MethodOne',
              ['MethodTwo', 80] // with priority 80
          ];
      }
  }
  
  // global dispatcher & provider
  $provider = new Provider();
  $events = new Dispatcher($provider);
  
  // set provider is enough
  $listener = new MyListener();
  $listener->setProvider($provider);
  
  // fire the event
  $events->dispatch(new MyEvent());
  

  use Phoole\Di\Container;
  
  // initiate the listener with dependencies injected
  $listener = Container::create(MyListener::class);
  
  // fire the event
  Container::events()->dispatch(new MyEvent());
  

  use Phoole\Event\EventCapableTrait;
  use Phoole\Event\EventCapableInterface;
  
  class MyEventCapable implements EventCapableInterface
  {
      use EventCapableTrait;
  
      public function myMethod()
      {
           $this->triggerEvent(new MyEvent());
      }
  }
  
  // global dispatcher & provider
  $provider = new Provider();
  $events = new Dispatcher($provider);
  
  $eventCapable = new MyEventCapable();
  $eventCapable->setDispatcher($dispatcher);
  
  // will trigger an event
  $eventCapable->myMethod();
  

  // initiate object with dependencies injected
  $eventCapable = Container::create(MyEventCapable::class);
  
  // will trigger an event
  $eventCapable->myMethod();