O que são eventos personalizados no Symfony?
Eventos personalizados são eventos customizados criados pelo programador em seu projeto Symfony. Eles servem para disparar ações específicas em determinados momentos do ciclo de vida da aplicação, permitindo ao desenvolvedor criar um fluxo de processamento mais adaptado à necessidade do projeto.
Como criar eventos personalizados no Symfony?
Para criar um evento personalizado no Symfony, é necessário seguir alguns passos. Primeiramente, é preciso criar uma classe que estenda a classe SymfonyComponentEventDispatcherEvent. Esta classe será responsável por definir as informações que serão passadas junto com o evento disparado, como por exemplo, informações de usuário, de log, etc.
namespace AppBundleEvent;
use SymfonyComponentEventDispatcherEvent;
class CustomEvent extends Event
{
private $userId;
public function __construct($userId)
{
$this->userId = $userId;
}
public function getUserId()
{
return $this->userId;
}
}
No exemplo acima, criamos uma classe CustomEvent que estende a classe Event e possui um construtor que recebe o id do usuário que será passado junto ao evento disparado. Além disso, a classe possui um método getUserId que retorna o id do usuário.
Após a criação da classe CustomEvent, é preciso disparar o evento em determinado momento do ciclo de vida da aplicação. Para isso, o Symfony disponibiliza uma classe chamada SymfonyComponentEventDispatcherEventDispatcher que é responsável por disparar eventos em nossa aplicação.
$dispatcher = new SymfonyComponentEventDispatcherEventDispatcher();
$event = new AppBundleEventCustomEvent($userId);
$dispatcher->dispatch('custom.event', $event);
No exemplo acima, criamos uma instância da classe EventDispatcher, depois criamos uma instância da classe CustomEvent passando o id do usuário como parâmetro e, por fim, disparamos o evento através do método dispatch da classe EventDispatcher. O primeiro parâmetro deste método é o nome do evento que será disparado, enquanto o segundo parâmetro é a instância da classe CustomEvent que será passada junto ao evento.
Como utilizar eventos personalizados no Symfony?
Para utilizar um evento personalizado no Symfony, é necessário definir um ou mais listeners (ouvintes) que serão notificados quando o evento for disparado. Para isso, basta criar uma classe que implemente a interface SymfonyComponentEventDispatcherEventSubscriberInterface e definir qual método deverá ser executado quando o evento em questão for disparado.
namespace AppBundleEventListener;
use SymfonyComponentEventDispatcherEventSubscriberInterface;
use AppBundleEventCustomEvent;
class CustomEventListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
'custom.event' => 'onCustomEvent'
);
}
public function onCustomEvent(CustomEvent $event)
{
$userId = $event->getUserId();
// realizar ação específica com o id do usuário
}
}
No exemplo acima, criamos uma classe CustomEventListener que implementa a interface EventSubscriberInterface e define o método onCustomEvent, que será executado quando o evento ‘custom.event’ for disparado. Este método recebe como parâmetro a instância da classe CustomEvent que foi passada junto ao evento, permitindo ao desenvolvedor acessar as informações definidas na classe CustomEvent.
Por fim, é preciso registrar este listener criado na classe CustomEventDispatcher. Para isso, basta criar uma instância da classe CustomEventListener e chamar o método addSubscriber da classe CustomEventDispatcher, passando como parâmetro esta instância.
$dispatcher = new CustomEventDispatcher();
$listener = new CustomEventListener();
$dispatcher->addSubscriber($listener);
No exemplo acima, criamos uma instância da classe CustomEventDispatcher, uma instância da classe CustomEventListener e adicionamos este listener através do método addSubscriber da classe CustomEventDispatcher.
Com isso, sempre que o evento ‘custom.event’ for disparado, o método onCustomEvent da classe CustomEventListener será executado, permitindo ao desenvolvedor realizar ações customizadas.