Mempelajari Filter CodeIgniter 4

irfan-photo irfan 3 yang lalu

belajar filter codeigniter 4

filter artinya menyaring

kalau di CI 4 filter digunakan untuk menyaring proses controller

menyaring proses controler berarti nantinya proses filter akan dilakukan terlebih dahulu sebelum melakukan proses controller maupun sesudah controller

kalau kita gambarkan melalui tulisan sederhananya sih gini
route > filter > controller > filter

fungsi filter di CI 4 ini sebenarnya banyak, selain bisa dijadikan sebagai middleware, bisa juga dijadikan untuk memanipulasi hasil response

misalnya filter sebagai middleware, yaitu pengecekan authentikasi, hak akses, atau bisa juga untuk halaman member premium

filter untuk manipulasi response, misalnya hasil responsenya diminified, atau ingin hasil responsenya menggunakan header tertentu

intinya sih filter di CI 4 sangat membantu sekali untuk meningkatkan security pada aplikasi kalian nantinya

Membuat File Filter

untuk membuat filter yaitu dengan menggunakan spark dengan mengetikan perintah
php spark make:filter nama_fiter

misalnya saya ingin membuat filter ProtectAdmin maka perintah yang diketikan yaitu
php spark make:filter ProtectAdmin

maka perintah diatas akan menggenerate file filter yang terletak di 'app/Filters/ProtectAdmin.php'

Memahami Method Filter

saat membuat filter menggunakan spark terdapat 2 method yang sudah ada yaitu

public function before(RequestInterface $request, $arguments = null){}

method before digunakan untuk menjalankan kode sebelum controller diproses, jika ingin menjadikan filter sebagai middleware maka disinilah tempat untuk mengetikan kodenya

terlihat ada 2 parameter yang dipakai pada method before ini yaitu $request dan $arguments

$request digunakan untuk mendapatkan data request yang ada,misalnya mendapatkan url, segment, dan lainnya

$arguments digunakan untuk menangkap data yang didefinisikan saat pemanggilan filter nantinya

fungsi dari nilai $arguments menurut saya yaitu untuk membuat kode filter menjadi lebih kompleks

public function after(RequestInterface $request, ResponseInterface $response, $arguments = null){}

kode yang diletakan dibagian method after ini nantinya akan diakses setelah controller diproses

dibagian after ini berbeda parameter methodnya dengan before, terlihat ada 3 parameter yang digunakan yaitu $request, $response, dan $arguments

Catatan : kenapa dimethod before tidak ada parameter $response yang di include ? karena method before dieksekusi sebelumn proses controller jadi tidak bisa mengetahui apa responsenya. sedangkan method after dieksekusi setelah proses controller maka filter sudah mengetahui responsenya apa

Menerapkan Filter

terdapat 2 cara yang bisa digunakan untuk menerapkan filter yaitu

menerapkan filter di 'app/Config/Filters.php'

cara pertama yaitu dengan menggunakan file config filter, didalam file konfigurasi ada beberapa property yang harus diketahui fungsinya yaitu

  • public $aliases digunakan untuk membuat alias (nama samaran) saat pemanggilan filter tujuannya bair lebih simple
  • public $globals tujuannya untuk memfilter secara global, didalamnnya sudah ada array before dan after, jika kalian ingin memfilter secara keseluruhan maka bisa menerapkan filter disini
  • public $methods menerpakan filter dibagian method http seperti GET, POST, PUT, DELETE. kalau aplikasi kalian digunakan untuk membuat rest API maka property ini cocok digunakan untuk memfilter setiap request HTTP
  • public $filters digunakan untuk membuat filter secara spesifik, misalnya hanya ingin menerapkan filter di segment tertentu atau dibeberapa segment maka kalian bisa menerapkan filternya disini
menerapkan filter di 'app/Config/Routes.php'

cara yang kedua yaitu filter bisa digunakan dibagian routes

penerapan filter diroute cukup mudah dan sebelumnya sudah pernah saya jelaskan dibagian mempelajari routing

berikut penerapan filter diroutes

// filter disingle routes
$routes->get('admin', 'Controller::method', ['filter' => 'checkauth']);

// filter di group routes	
$routes->group('admin', ['filter' => 'checkauth'] ,function ($routes) {
	$routes->add('posts', 'Admin\posts::index');
	$routes->add('settings', 'Admin\settings::index');
});

Catatan : menurut saya lebih enak menerapkan filter dibagian routes karena enak dibaca alurnya daripada menerapkannya diconfig filternya langsung, biasanya saya menggunakan config filternya sebagai alias saja agar pemanggilan diroutes menjadi lebih singkat

Praktek Menggunakan Filter

untuk memperjelas gimana caranya filter ini bekerja kita langsung saja praktek yah...

praktek filter kali ini akan memiliki spesifikasi kode

  • Membuat 2 Controller yaitu free dan premium
  • Membuat 1 Filter yaitu checkpremium
  • Mengatur alias Filter
  • Mengaktifkan Filter di single route
Langkah 1 (Membuat Controller)

ketikan perintah spark dicommand line / terminal kalian
php spark make:controller free
php spark make:controller premium

menjalankan spark make:controller

Langkah 2 (Mengedit Controller)

ubah kode pada Controller Free, yang filenya terletak di 'App/Controllers/Free.php' dengan kode dibawah ini

<?php

namespace App\Controllers;

use App\Controllers\BaseController;

class Free extends BaseController
{
    public function index()
    {
        echo 'berikut konten gratis yang kami sediakan';
    }
}

ubah kode Controller Premium, dengan kode dibawah ini

<?php

namespace App\Controllers;

use App\Controllers\BaseController;

class Premium extends BaseController
{
    public function index()
    {
       echo 'berikut konten premium yang kami sediakan';
    }
}
Langkah 3 (Membuat Filter)

Ketikan perintah spark dibawah ini

php spark make:filter checkpremium

ubah filter yang sebelumnya dibuat dengan kode dibawah ini, file filter terletak di 'app/Filters/Checkpremium.php'

<?php

namespace App\Filters;

use CodeIgniter\Filters\FilterInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;

class Checkpremium implements FilterInterface
{

    public function before(RequestInterface $request, $arguments = null)
    {

        // mengeck apakah ada session yang namanya isPremium atau tidak
        if (!session()->isPremium) {
            // jika tidak ada maka akan mengakhiri program dengan kode die()
            die('kamu tidak memiliki akses untuk melihat halaman ini');
        }

    }

    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    {
        //
    }
}
Langkah 4 (Pengaturan Filter)

buka file pengaturan filter yang terletak di 'app/Config/Filters.php' dan masukan kode ini dibagian property aliases

'checkpremium' => \App\Filters\CheckPremium::class,

Langkah 5 (Mengaktifkan Filter diroutes)

dilanjut dengan membuat route sekaligus menerapkan filternya

edit config router yang terletak di 'app/Config/Routes.php' dan tambahkan kode dibawah ini dibagian Route Definitions

// menambahkan route free
$routes->get('free', 'Free::index');

// menambahkan route premium dengan filter alias yang sebelumnya disetting
$routes->get('premium', 'Premium::index', ['filter' => 'checkpremium']);
langkah 6 (Uji Coba Filter)

aktifkan webserver melalui command spark yaitu 'php spark serve'

buka browser kalian dan kunjungi URL 'http://localhost:8080/free'

saat halaman free dibuka maka akan muncul seperti kode controller

coba sekarang buka halaman premium dengan mengujungi URL 'http://localhost:8080/premium'

saat membuka halaman premium kalian tidak akan melihat kode yang dituliskan dicontroller karena terdapat filter yang menyaring apakah kalian memiliki session untuk melihat halaman ini atau tidak

hasil praktek filter codeigniter 4

Dilihat 2.73Kx
Terakhir diupdate 03/September/2022 04:21 AM
Buka Diskusi