O que é o sistema de bus-eventos do Symfony?
O sistema de bus-eventos do Symfony é uma ferramenta que permite a manipulação e execução de eventos de forma assíncrona. Ele permite que os eventos sejam levantados e manipulados em tempo real, evitando a necessidade de processamento em lotes ou espera por processos.
Como funciona o sistema de bus-eventos do Symfony?
O sistema de bus-eventos do Symfony é composto por diferentes componentes, sendo eles:
- EventDispatcher: responsável pelas operações de despacho e manipulação dos eventos.
- Event: representa uma ação ou ocorrência únicas que podem ser manipuladas pelo sistema.
- EventSubscriber: um ouvinte de eventos que é registrado para ouvir eventos específicos.
Quando um evento é levantado pela aplicação, o EventDispatcher é ativado e o evento é despachado. Em seguida, o EventSubscriber, que é registrado para ouvir o evento específico, é acionado e manipula o evento de acordo com suas necessidades.
Como utilizar o sistema de bus-eventos do Symfony?
Para utilizar o sistema de bus-eventos do Symfony, é preciso seguir alguns passos.
- Definir eventos: Crie uma classe para o evento que deseja levantar e manipular. A classe deve estender a classe base “Event”.
- Definir ouvintes de eventos: Crie uma classe para o ouvinte de eventos, que estende a classe “EventSubscriberInterface”. Na classe, defina o(s) método(s) que manipulará(ão) o(s) evento(s) ouvido(s) através da anotação “@EventSubscriber”.
- Criar e levantar eventos: Para criar e levantar um evento, crie uma instância da classe de evento e use o método “dispatch” do EventDispatcher para despachá-lo.
namespace AppEvent;
use SymfonyComponentEventDispatcherEvent;
class ExemploEvento extends Event
{
// Propriedades e métodos específicos do evento
}
namespace AppSubscriber;
use SymfonyComponentEventDispatcherEventSubscriberInterface;
use SymfonyComponentEventDispatcherEventSubscriber;
class ExemploSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
ExemploEvento::class => 'onExemploEvento',
];
}
public function onExemploEvento(ExemploEvento $event)
{
// Código para manipular o evento
}
// Outros métodos para manipulação de eventos
}
use AppEventExemploEvento;
use SymfonyComponentEventDispatcherEventDispatcherInterface;
class AlgumaClasse
{
private $dispatcher;
public function __construct(EventDispatcherInterface $dispatcher)
{
$this->dispatcher = $dispatcher;
}
public function algumMetodo()
{
// Criando uma instância do evento
$evento = new ExemploEvento();
// Despachando o evento
$this->dispatcher->dispatch($evento);
}
}
Dessa forma, o sistema de bus-eventos do Symfony é utilizado para manipular eventos de maneira assíncrona.