Study
CodeIgniter

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

Editor Latihan

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.