Middleware di CakePHP
Penjelasan
CakePHP versi modern memakai middleware standar PSR-15 (sama seperti banyak framework PHP modern lainnya) — class yang mengimplementasikan MiddlewareInterface, didaftarkan di src/Application.php lewat method middleware().
Contoh Konsep
<?php
namespace App\Middleware;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Cake\Http\Response;
class CekUmurMiddleware implements MiddlewareInterface
{
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
if ((int) $request->getQuery('umur') < 18) {
return (new Response())->withStatus(403)->withStringBody('Akses ditolak, umur minimal 18 tahun');
}
return $handler->handle($request); // lanjut ke middleware berikutnya / controller
}
}
// src/Application.php
public function middleware($middlewareQueue): $middlewareQueue
{
$middlewareQueue->add(new \App\Middleware\CekUmurMiddleware());
return $middlewareQueue;
}
Praktikum
Buat middleware CekJamKerjaMiddleware yang menolak akses (status 403) kalau jam sekarang (date('H')) di luar rentang 08-17 di method process(), dan meneruskan request kalau masih dalam jam kerja.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Sama seperti middleware Laravel, JANGAN lupa memanggil $handler->handle($request) dan mengembalikan hasilnya di akhir kalau request boleh lanjut — kalau lupa, request akan "berhenti" di situ dan controller tujuannya tidak pernah dijalankan.