Memahami Routing di Codeigniter

Secara sederhana routing dapat dikatakan memberikan alias kepada alamat URL dan mengarahkannya ke controller atau method yang dimaksud. contohnya bagaimana jika kita ingin mengarahkan suatu alamat URL menuju suatu controller atau method yang tidak memiliki nama yang sama dengan URL? hal ini bisa dilakukan dengan melakukan routing yang dapat dilakukan dengan mudah di codeigniter.

Mari kita latihan untuk memudahkan pemahaman mengenai routing, buatlah sebuah controller beri nama Content.php simpan di application controllers, dan isi dari controller tersebut seperti dibawah ini :

Setelah itu buka file application/config/routes.php lalu tambahkan kode routing dibawah ini :

Baris 1 : kode tersebut akan mengarahkan request http://localhost/dev/artikel , menuju method index() di controller Content{}.

Baris 2 : kode tersebut mengarahkan request http://localhost/dev/artikel/detail , yang menuju method show() di controller Content{}.

untuk mengujinya langsung di browser silahkan buka alamat tersebut di browser akan tampak hasilnya seperti gambar dibawah ini.

memahami routing di codeigniter
Gambar 1 : Daftar Artikel
memahami routing di codeigniter
Gambar 2 : Detail Artikel

Routing sederhana ini dimaksudkan untuk modal awal pemahaman dasar kita, selanjutnya routing dapat dikombinasikan lebih komplek lagi.


1. Routing Menggunakan Wilcard (:any)

Routing jenis ini kita bisa menggunakan pola URL memakai wildcard (:any) dimana routing ini akan mencocokan pola apa saja dan mengembalikan pola yang dicocokan sebagai nilai balik.

Sebagai contoh, misalnya kita mempunyai sebuah content dengan berbagai macam kategori artikel misalnya PHP, CodeIgniter, MySQL. dan tiap-tiap artikel memiliki pola URL seperti berikut

  1. http://localhost/dev/artikel
  2. http://localhost/dev/php/membuat-crud-di-php
  3. http://localhost/dev/mysql/membuat-database-di-phpmyadmin
  4. http://localhost/dev/codeigniter/memahami-routing-di-codeigniter

Penjelasan :

  • No.1 adalah halaman index content, yang berisi daftar artikel yang ditangani oleh method index() di controller Content{}.
  • No.2 sampai No.4 adalah salah satu artikel pada suatu kategori. URI segment #1 adalah kategori. URI segment #2 adalah judul artikel.
  • Dan untuk no.2 sampai No.4 kita ingin agar URL yang memiliki pola tersebut ditangani oleh method show(), bagaimana caranya?

Pertama buka kembali file config/routes.php dan ubah isinya menjadi :

Penjelasan :

  • No. 1 routing ini menangani request ke halaman daftar artikel.
  • No.2 routing ini akan menangani request ke halaman detail artikel. wildcard (:any) yang pertama akan menangkap nilai pada segment tersebut di URL, kemudian menyimpan nilainya untuk diberikan kepada $1, lalu nilai pada $1 akan dijadikan sebagai nama kategori. kemudian wildcard (:any) yang ke-dua akan menangkap nilai di segment tersebut, dan memberikan nilainya sebagai $2, dan kemudian nilainya akan dijadikan sebagai judul artikel.

Untuk lebih jelas lagi coba controller Content.php diatas, kita ubah isinya menjadi seperti berikut ini :

Di browser, jika kita mengakses halaman index pada controller diatas, akan nampak sama hasilnya seperti pada Gambar 1 diatas.

Lalu pada browser buka halaman berikut http://localhost/dev/codeigniter/memahami-routing-di-codeigniter , maka akan nampak hasilnya seperti pada gambar dibawah ini.

Gambar 3 : menggunakan fungsi wildcard(:any) di codeigniter

Dari sini kita dapat menarik kesimpulan bahwa wildcard (:any) atau (anythings), adalah suatu pola yang akan mencocokan pola apasaja pada URL.


2. Menggunakan Wildcard (:num)

Berbeda dengan wildcard (:any), di CodeIgniter juga memiliki wildcard (:num) atau singkatan dari number, yaitu suatu pola yang akan mencocokan segment berupa angka.

Kita langsung saja pada contoh, misalnya URL yang memuat detail artikel memiliki pola :

Jadi untuk menampilkan detail dari setiap artikel ditandai dengan ID dari masing-masing artikel tersebut.

kita akan ubah kembali routing yang sudah kita buat sebelumnya, menjadi seperti berikut :

Dan ubah kembali method show() pada controller Content{}, menjadi seperti berikut :

Lalu pada browser buka halaman berikut http://localhost/dev/codeigniter/78 akan terlihat hasilnya seperti gambar dibawah ini.

wildcard num di codeigniter
Gambar 4 : menggunakan fungsi wildcard (:num) di codeigniter

Lalu terpikir oleh kita bagaimana jika nilai yang dimasukan bukan hanya angka atau number, misalnya 78sdk yaitu kombinasi huruf dan angka, tentu saja ini tidak akan berjalan dengan baik hasilnya akan ditemukan error 404

wildcard num di codeigniter error 404
Gambar 5 : wildcard (:num) error 404

Jadi, kesimpulan dari penggunaan wildcard (:num) hanya akan cocok jika menerima segment URL yang berupa angka saja, tidak seperti wildcard (:any) yang akan cocok dengan nilai apa saja.


3. Menggunakan Regular Expression (Regex)

Selain menggunakan wildcard(:any) dan (:num), kita juga bisa menggunakan regular expression untuk mencocokan pola URL, misalnya untuk setiap URL dengan segment #1 bernilai “codeigniter”, “mysql”, atau “php”, maka akan langsung ditampilkan detail dari artikel tersebut. dan pada segment #2 adalah judul artikel.

Untuk lebih jelasnya mari kita ubah routing yang sudah kita buat sebelumnya, menjadi seperti berikut ini

Untuk routing diatas artinya, detail artikel harus diawali dengan kata ‘codeigniter’, ‘mysql’, atau ‘php’. kecuali untuk halaman index atau daftar artikel. Jika pada segment #1 URL tidak mengandung ketiga kata tersebut, maka akan terjadi error 404.

kita akan ubah kembali method show() pada controller content{} menjadi seperti berikut ini :

lalu kembali kita buka browser dan kita akses URL berikut : http://localhost/dev/codeigniter/routing-regex-di-codeigniter , hasilnya akan terlihat seperti gambar dibawah ini :

routing regex di codeigniter
Gambar 6 : menggunakan fungsi regex di codeigniter

Begitu juga jika kita mengganti segment #1 dengan daftar nama yang sudah kita buat di route tadi, maka hasilnya akan dialihkan ke method show().

Bagaimana jika yang kita tuliskan pada segment #1 tidak ada pada daftar route? maka akan terjadi error. hal tersebut terjadi karena codeigniter tidak dapat menemukan pola yang sudah ditentukan pada regular expression di route.php.

Saran * Sebaiknya tidak terlalu banyak menggunakan teknik ini, karena selain mengurangi kecepatan, jika URL memiliki banyak pola yang harus di cocokan maka itu akan cukup menyulitkan untuk dibuat programnya

Demikian penjelasan mengenai routing di Codeigniter ini semoga menambah pengetahuan kita bersama, jika ada kritik saran dan masukan silahkan sampaikan pada kolom komentar dibawah ini, sekian dan terimakasih.

2 Responses to "Memahami Routing di Codeigniter"

Post Comment