EventDispatcher: eventos desacoplados
Despache e escute eventos usando o EventDispatcher do Symfony.
EventDispatcher: eventos desacoplados é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.
O que é o EventDispatcher?
Symfony EventDispatcher implementa o padrão Observador. O código despacha eventos; os ouvintes reagem a eles — sem que o despachante saiba algo sobre os ouvintes.
Instalando
Instale o componente.
$ composer require symfony/event-dispatcherCriando um evento
Um evento é uma classe PHP simples, que geralmente estende Event (opcional) e transporta dados.
<?php
use Symfony\Contracts\EventDispatcher\Event;
class UserRegisteredEvent extends Event
{
public const NAME = "user.registered";
public function __construct(public readonly User $user) {}
}Criando um ouvinte
Um ouvinte é um elemento chamável ou objeto que reage a um evento específico.
<?php
class SendWelcomeEmailListener
{
public function __invoke(UserRegisteredEvent $event): void
{
mail($event->user->email, "Welcome!", "Thanks for joining!");
}
}Registrando ouvintes
Associe ouvintes ao despachante.
<?php
use Symfony\Component\EventDispatcher\EventDispatcher;
$dispatcher = new EventDispatcher();
$dispatcher->addListener(
UserRegisteredEvent::NAME,
new SendWelcomeEmailListener()
);Despachando um evento
Despache o evento — todos os ouvintes registrados são chamados na ordem de prioridade.
<?php
$user = new User("alice@example.com");
$dispatcher->dispatch(new UserRegisteredEvent($user), UserRegisteredEvent::NAME);Prioridade dos ouvintes
Passe um número inteiro de prioridade como terceiro argumento para addListener(). Números maiores são executados primeiro (padrão: 0).
<?php
$dispatcher->addListener("user.registered", $logListener, 10); // runs first
$dispatcher->addListener("user.registered", $emailListener, 0); // runs secondAssinantes de eventos
Um assinante de eventos é uma classe que registra automaticamente seus ouvintes ao implementar EventSubscriberInterface.
<?php
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class UserSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array {
return [
UserRegisteredEvent::NAME => "onUserRegistered",
];
}
public function onUserRegistered(UserRegisteredEvent $event): void {
// ...
}
}Interrompendo a propagação
Chame $event->stopPropagation() dentro de um ouvinte para impedir a execução dos ouvintes seguintes.
No Laravel
O Laravel tem seu próprio sistema de eventos. Despache com event(new UserRegistered($user)). Registre ouvintes em EventServiceProvider ou use o atributo #[Listen].
Benefícios da arquitetura orientada a eventos
Os eventos desacoplam componentes: o serviço de registro não importa o serviço de e-mail. Novos comportamentos (registro, análise) podem ser adicionados registrando novos ouvintes sem modificar o código existente.
Resumo
Crie classes de eventos com dados, associe ouvintes com addListener() e despache eventos com $dispatcher->dispatch(). Use assinantes para grupos de ouvintes que se registram automaticamente.
Verificação rápida
Como impedir a execução dos ouvintes seguintes?
Perguntas Frequentes
A aula “EventDispatcher: eventos desacoplados” é grátis?
Sim — o texto completo de “EventDispatcher: eventos desacoplados” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.
O que vou aprender em “EventDispatcher: eventos desacoplados”?
Despache e escute eventos usando o EventDispatcher do Symfony. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar PHP Academy?
Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “EventDispatcher: eventos desacoplados”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de PHP Academy?
Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- HttpFoundation: solicitação e resposta
- Contêiner de DependencyInjection
- EventDispatcher: eventos desacoplados
- Componente Console: comandos CLI