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