Filter di CodeIgniter
Penjelasan
Filter adalah versi CodeIgniter dari middleware — kode yang dijalankan SEBELUM (atau sesudah) request sampai ke controller. Filter dibuat sebagai class yang mengimplementasikan FilterInterface, lalu didaftarkan aliasnya di app/Config/Filters.php supaya bisa dipasang ke route tertentu.
Contoh Konsep
<?php
namespace App\Filters;
use CodeIgniter\Filters\FilterInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
class CekUmur implements FilterInterface
{
public function before(RequestInterface $request, $arguments = null)
{
if ((int) $request->getGet('umur') < 18) {
return service('response')
->setStatusCode(403)
->setBody('Akses ditolak, umur minimal 18 tahun');
}
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
// kosongkan kalau tidak butuh logika setelah response dikirim
}
}
// app/Config/Filters.php
public array $aliases = [
'cekUmur' => \App\Filters\CekUmur::class,
];
// app/Config/Routes.php
$routes->get('/dewasa', 'Halaman::dewasa', ['filter' => 'cekUmur']);
Praktikum
Buat filter CekJamKerja yang menolak akses (response 403) kalau jam sekarang (date('H')) di luar rentang 08-17 lewat method before(), dan tidak melakukan apa pun di method after().
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Filter WAJIB mengimplementasikan KEDUA method before() dan after() dari FilterInterface meski salah satunya tidak dipakai — beda dengan middleware Laravel yang cuma punya satu method handle(), filter CodeIgniter memisahkan logika sebelum dan sesudah request secara eksplisit.