Study
Symfony

Event Listener & Subscriber

Penjelasan

Symfony tidak memakai istilah "middleware" seperti Laravel/CodeIgniter — sebagai gantinya, Symfony memakai Event Listener/Subscriber yang bereaksi terhadap event siklus hidup request, mis. kernel.request (dijalankan di awal sebelum controller). Listener didaftarkan lewat attribute #[AsEventListener] langsung di atas method-nya.

Contoh Konsep

<?php

namespace App\EventListener;

use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpFoundation\Response;

class CekUmurListener
{
    #[AsEventListener(event: 'kernel.request')]
    public function onKernelRequest(RequestEvent $event): void
    {
        $request = $event->getRequest();

        if ((int) $request->query->get('umur', 0) < 18) {
            $event->setResponse(new Response('Akses ditolak, umur minimal 18 tahun', 403));
        }
    }
}

Praktikum

Buat listener CekJamKerjaListener dengan method onKernelRequest(RequestEvent $event) yang memakai attribute #[AsEventListener(event: 'kernel.request')], menolak akses (Response 403) kalau jam sekarang (date('H')) di luar rentang 08-17.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Memanggil $event->setResponse() di dalam listener kernel.request menghentikan pemrosesan request lebih lanjut — controller yang dituju TIDAK akan pernah dijalankan sama sekali, mirip efeknya dengan middleware yang tidak memanggil $next() di Laravel.