Menggunakan Filters Di Codeigniter 4 Sebagai Middleware
Tags: php, codeigniter4, codeigniter, tutorial
Published: 2022-01-09 10:06:35

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 :

1.  Authorization
2.  Validasi dan Sanitasi Input
3.  Logger
4.  CSRF
5. 	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
<?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
<?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
<?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
<?php
$routes->get('/dashboard', 'Home::index', ['filter' => 'authfilter']);
```

Sekian tutorial kali ini ,jika ada yang kurang paham bisa ditanyakan jangan dipendam.