Especialização em Backend com PHP & Laravel • Demonstrações Práticas Compiláveis


💻 Exemplo 1 — Evento Transmitível em Canal Privado

<?php
namespace App\Events;

use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\InteractsWithSockets;
use App\Models\Pedido;

class StatusPedidoAtualizadoEvent implements ShouldBroadcast
{
    use SerializesModels, InteractsWithSockets;

    public function __construct(public Pedido $pedido) {}

    public function broadcastOn(): array
    {
        return [new PrivateChannel('pedidos.' . $this->pedido->user_id)];
    }

    public function broadcastAs(): string
    {
        return 'status.atualizado';
    }

    public function broadcastWith(): array
    {
        return [
            'pedido_id' => $this->pedido->id,
            'status' => $this->pedido->status,
        ];
    }
}
<?php
// Disparo do evento em algum ponto do fluxo de negócio
event(new StatusPedidoAtualizadoEvent($pedido));

💻 Exemplo 2 — Autorização de Canal Privado e de Presença

<?php
// routes/channels.php
use Illuminate\Support\Facades\Broadcast;
use App\Models\Pedido;

Broadcast::channel('pedidos.{userId}', function ($user, $userId) {
    return (int) $user->id === (int) $userId;
});

Broadcast::channel('chat.{salaId}', function ($user, $salaId) {
    // Canal de presença: retorno não-nulo já autoriza e define os dados do usuário presente.
    return ['id' => $user->id, 'name' => $user->name];
});

💻 Exemplo 3 — Consumo no Frontend com Laravel Echo

// resources/js/echo.js
import Echo from 'laravel-echo';
import Pusher from 'pusher-js';

window.Pusher = Pusher;

window.Echo = new Echo({
    broadcaster: 'reverb',
    key: import.meta.env.VITE_REVERB_APP_KEY,
    wsHost: import.meta.env.VITE_REVERB_HOST,
    wsPort: import.meta.env.VITE_REVERB_PORT,
    forceTLS: false,
    enabledTransports: ['ws'],
});

window.Echo.private(`pedidos.${window.userId}`)
    .listen('.status.atualizado', (evento) => {
        console.log(`Pedido ${evento.pedido_id} agora está ${evento.status}`);
    });