Routing itu kalau diterjemahkan jadi bahasa indonesia maka artinya rute
routing di codeigniter 4 ini berarti berguna untuk menentukan rute URL
jadi ketika mengakses web anda akan melalui pengecekan routing terlebih dahulu tersedia atau tidak
jika tersedia maka akan dilanjutkan keproses berikutnya dan jika tidak maka akan memunculkan halaman 404 error
routing di CI 4 dapat dilakukan secara otomatis atau manual, tergantung kebutuhan anda nantinya saat membuat aplikasi
file routing codeigniter 4 terletak di app/Config/Routes.php yang didalamnya sudah ada kode default untuk routing
disini kalian hanya akan fokus pada bagian Router Setup dan Route Definitions
oke kita bahas satu persatu bagian tersebut
Router Setup
dibagian ini kalian bisa melakukan setting default terhadap route yang nantinya akan digunakan, berikut kode yang ada dan penjelasannya
$routes->setDefaultNamespace('App\Controllers');
Kode diatas berguna untuk mengatur default namespace controller yang nantinya akan kalian buat, menurut saya ini tidak perlu dirubah dan biarkan default
$routes->setDefaultController('Home');
kode diatas digunakan untuk mengatur default controller atau bisa disebut default halaman index, terlihat defaultnya berisi nilai Home yang artinya default index tersebut mengarah ke file Controller yang terletak di app/Controllers/Home.php
disini kalian bisa merubah sesuai kebutuhan masing-masing aplikasi yang akan dibuat
$routes->setDefaultMethod('index');
maksudnya setDefaultMethod berarti nantinya saat File Controllers diakses maka untuk menentukan default methodnya merujuk pada method index sebagai defaultnya
coba kalian buka file controllers Home.php pasti akan ada method yang diberi nama index
$routes->setTranslateURIDashes(false);
fungsi kode diatas digunakan untuk menentukan apakah url yang bersifat dash (-) akan ditranslate menjadi underscore atau tidak, jika segment pertama anda menggunakan dash maka wajib untuk mengaktifkan fitur ini agar method pada controler dapat terbaca dengan baik
$routes->set404Override();
kode diatas digunakan untuk mereplace atau mengganti halaman 404
jika anda tidak suka dengan tampilan error bawaan codeigniter 4 anda bisa menggunakan custom error sendiri dengan mengaturnya
$routes->setAutoRoute(true);
method setAutoRoute digunakan untuk membuat automatis routing, jika anda ingin menggunakan routing manual maka bisa merubah nilainya menjadi false
jadi ketika anda menonaktifkan fitur auto route ini maka nantinya ketika mengakses controller yang ada namun belum didefinisikan di routes maka tidak akan terbaca dan akan menampilkan error 404
jadi solusinya adalah mendifinisikannya secara manual dibagian Route Definitions
Route Definitions
dibagian ini kalian bisa mendefinisikan route yang akan dibuat secara manual
terdapat kode default yang sudah ditulis yaitu $routes->get('/', 'Home::index');
kode diatas merupakan kode bawaan codeigniter saat menginstall dan bisa kalian rubah sesuai kebutuhan nantinya
penulisan kode routes ini tidak hanya seperti diatas saja terdapat berbagai cara untuk mendifinisikan route, berikut saya akan bahas satu persatu
Menggunakan HTTP Method
selain request get yang digunakan kalian juga bisa menggunakan request http yang lain yaitu post, put, delete
contoh penulisannya
$routes->get(path, 'Controller::method');
$routes->post(path, 'Controller::method');
$routes->put(path, 'Controller::method');
$routes->delete(path, 'Controller::method');
jika ingin menggunakannya lebih dari satu request maka kalian bisa menggunakan method match, berikut penulisannya
$routes->match(['get','post'], path, 'Controller::method');
atau jika ingin menggunakan semua request http yang ada kalian bisa menggunakan method add, berikut kode penulisannya
$routes->add(path, 'Controller::method');
Catatan : sebaiknya gunakan method request http biasa saja dibanding menggunakan method add, karena jika kebutuhannya hanya disatu request saja maka itu akan meningkatkan performance aplikasi
Menangani Segment URL Dinamis
URL dinamis merupakan bagian yang tidak akan terlewatkan dari website sendiri, karena sifatnya dinamis maka URL tersebut akan berbeda-beda nilai segmentnya
misalnya saya punya url sebagai berikut
- http://localhost:8080/post/belajar-codeigniter-2
- http://localhost:8080/post/belajar-codeigniter-3
- http://localhost:8080/post/belajar-codeigniter-4
terlihat terdapat nilai segment yang berubah (dinamis) yaitu sehabis segment post, nah untuk menangkap nilai segment yang dinamis ini membutuhkan cara khusus untuk menanganinya
terdapat beberapa cara yang bisa digunakan untuk menangkap nilai segment diatas yaitu dengan menggunakan placeholders , custom placeholder, atau dengan regex manual
Menggunakan Placeholders defaultplaceholders di CI 4 ini sebenernya cara mudah untuk menggunakan regex, jadi kalian tidak perlu repot-repot lagi untuk menuliskan regex jika dirasa placeholders ini sudah bisa menanganinya
terdapat 6 placeholders yang sudah disediakan oleh codeigniter 4 untuk menangani URL yang sifatnya dinamis, berikut daftar dan penjelasannya
- (:any) berarti akan menangkap semua karakter yang ada pada url
- (:segment) akan menangkap semua karakter kecuali karakter slash (/)
- (:num) menangkap semua karakter angka
- (:alpha) menangkap karakter alphabet saja
- (:alphanum) menangkap karakter alphabet dan angka
- (:hash) menangkap karakter hash
berikut penulisan kode menggunakan placeholders default bawaan CI 4
$routes->get('post/(:alpha)-(:alpha)-(:num)', 'Controller::method/$1');
jika dirasa terdapat segment url yang tidak bisa dihandle oleh placeholders default kalian bisa membuat custom placeholders sendiri, berikut penulisan kodenya
$routes->addPlaceholder('permalink', '[a-z]-[a-z]-[0-9]{1}');
$routes->get('post/(:permalink)', 'Controller::method/$1');
$routes->get('post/([a-z]+)-([a-z]+)-([0-9])', 'Controller::method/$1');
Catatan : $1 ditujukan untuk membaca segment yang menggunakan regex / placeholder, jika ada 2 segment yang sifatnya dinamis tinggal diurutkan saja $1 adalah segment dinamis yang pertama, $2 adalah segment dinamis yang kedua
nah $1,$2,dan seterusnya itu buat ditaruh dicontroller, jadi nanti penulisan method pada controller menjadi
public function nama_method($segment1 = null, $segment2 = null){}
Menambahkan Filter
untuk membuat filter lebih fleksibel dalam penggunaannya kalian bisa menambahkan filter langsung dibagian route ini
berikut penulisan kode untuk menambahkan filter
$routes->get('admin', 'Controller::method', ['filter' => 'checkauth'])
Membuat Route Grouping
ketika aplikasi sudah sangat kompleks dan rumit anda pasti akan membutuhkan yang namanya grouping dibagian route, atau bisa juga untuk menggrupkan bagian yang akan difilter milsanya halaman admin
berikut penulisan route grouping
$routes->group('admin', function ($routes) {
$routes->add('posts', 'Admin\posts::index');
$routes->add('settings', 'Admin\settings::index');
});
penulisan route grouping dengan filter
$routes->group('admin', ['filter' => 'checkauth'] ,function ($routes) {
$routes->add('posts', 'Admin\posts::index');
$routes->add('settings', 'Admin\settings::index');
});
Route Closure
selain untuk menghubungkan ke-controller, route juga bisa langsung mengeksekusi program dengan menggunakan fitur closure atau anda bisa menyebutnya dengan anonymous function
berikut penulisan kode route clousure
$routes->get('/', function () {
return view('welcome_message');
});
Kesimpulan
peran routes ini sangat penting sekali dalam sebuah aplikasi
selain untuk mendefinisikan rute URL, fungsi routes juga digunakan untuk security aplikasi karena kalian bisa melakukan filter dan memilih method http apa yang akan digunakan didalam route ini