Tutorial kali ini akan membahas penggunaan Filters sebagai middleware di Codeigniter 4.
Apa itu Middleware?
Middleware di dunia pemrograman web adalah software layer yang menghubungkan antara request dengan controller.Hal paling umum adalah authentication.Selain itu juga bisa digunakan untuk beberapa hal seperti :
- Authorization
- Validasi dan Sanitasi Input
- Logger
- CSRF
- Dan Lain-lain
Middleware membuat kode kita lebih clean , reusable, maintainable dan readable.Karena membuat controller hanya akan fokus dalam proses alur bisnis tanpa harus melakukan hal-hal lain seperti validasi login,input dan lain-lain.Umumnya middleware dipasang di router terutama untuk framework yang menganut sistem MVC seperti Codeigniter 4,tapi tidak selalu begitu tergantung aturan framework masing-masing.
Menggunakan Filters sebagai Middleware
Sebagai contoh kita akan membuat middleware sederhana Authentication di Codeigniter 4 untuk mengcheck apakah user sudah login.
Membuat Filters
Pertama buat Filters baru di app\Filters bernama AuthFilter.php,lalu isi dengan kode dibawah.
<?php namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class AuthFilter implements FilterInterface
{
public function before(RequestInterface $request)
{
if (!session()->islogin)
{
echo "invalid";
return redirect()->to(base_url('/auth'))->with('error', "Invalid Credential");
}
// Do something here
}
//--------------------------------------------------------------------
public function after(RequestInterface $request, ResponseInterface $response)
{
// Do something here
}
}
Bisa dilihat pada kode diatas kita menambahkan kode di fungsi before jadi dijalankan sebelum masuk ke controller.Fungsinya sangat sederhana hanya mengcheck apakah session()->isLogin ,jika tidak ada akan redirect ke halaman login dengan memberikan pesan Invalid Credential.
Menambahkan Filters ke Config
Tahap selanjutnya adalah menambahkan AuthFilter yang sudah dibuat ke dalam Config agar bisa digunakan.Buka File Filters.php di folder app\Config.
Tambahkan Filters yang dibuat tadi sehingga menjadi seperti dibawah ini.
<?php namespace Config;
use CodeIgniter\Config\BaseConfig;
class Filters extends BaseConfig
{
// Makes reading things below nicer,
// and simpler to change out script that's used.
public $aliases = [
'csrf' => \CodeIgniter\Filters\CSRF::class,
'toolbar' => \CodeIgniter\Filters\DebugToolbar::class,
'honeypot' => \CodeIgniter\Filters\Honeypot::class,
'authfilter' => \App\Filters\AuthFilter::class
];
Kita beri nama authfilter agar mudah dipanggil.
Menggunakan Filters di Router
Untuk menggunakan Filters buka file Routes.php di folder app\Config.
Untuk penggunaan router group ubah menjadi kode dibawah ini.
<?php
//skill
$routes->group('skill', ['filter' => 'authfilter'], function($routes) {
$routes->get('/', 'Skill::index');
$routes->get('add', 'Skill::add');
$routes->post('add', 'Skill::store');
});
Jadi setiap kali route skill dipanggil akan mengcheck apakah sudah login atau tidak.
Untuk penggunaan router bisa.
<?php
$routes->get('/dashboard', 'Home::index', ['filter' => 'authfilter']);
Sekian tutorial kali ini ,jika ada yang kurang paham bisa ditanyakan jangan dipendam.