0Pricing
PHP Academy · Aula

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-dispatcher

Criando 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 second

Assinantes 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

  1. HttpFoundation: solicitação e resposta
  2. Contêiner de DependencyInjection
  3. EventDispatcher: eventos desacoplados
  4. Componente Console: comandos CLI
← Voltar para PHP Academy