Perutean URI (URI Routing)

Biasanya ada hubungan satu-ke-satu antara string URL dan kelas/metode pengontrol yang sesuai. Segmen dalam URI biasanya mengikuti pola ini:

  • example.com/class/method/id/

Namun, dalam beberapa kasus, Anda mungkin ingin memetakan kembali hubungan ini sehingga kelas/fungsi yang berbeda dapat dipanggil alih-alih yang terkait dengan URL.

Misalnya, katakanlah Anda ingin URL Anda memiliki prototipe ini:

  • example.com/product/1/
  • example.com/product/2/
  • example.com/product/3/
  • example.com/product/4/

Biasanya segmen kedua dari URL dicadangkan untuk nama fungsi, tetapi dalam contoh di atas, ia memiliki ID produk. Untuk mengatasinya, Seme Framework memungkinkan Anda untuk memetakan ulang pengendali URI.


Setting custom URI Routing

Aturan perutean ditentukan di app/config/ Anda. Anda dapat menyetel perutean ini untuk diterapkan ke dalam produksi, staging, atau pengembangan bergantung pada kebutuhan Anda.

Pada setiap file konfigurasi, Seme Framework telah membuat bagian komentar untuk menulis ulang URI di bagian perutean.

Dan kemudian jika Anda membuka file konfigurasi, Anda akan melihat larik bernama $routes yang memungkinkan Anda menentukan kriteria perutean Anda sendiri. Rute dapat ditentukan menggunakan wildcard


Wildcards

Rute wildcard tipikal mungkin terlihat seperti ini:

$routes['product/:num'] = "catalog/product_lookup";

Dalam sebuah rute, kunci larik berisi URI yang akan dicocokkan, sedangkan nilai larik berisi tujuan yang harus dirutekan ulang. Dalam contoh di atas, jika kata literal "produk" ditemukan di segmen pertama URL, dan nomor ditemukan di segmen kedua, kelas "katalog" dan metode "pencarian_produk" akan digunakan.

Anda dapat mencocokkan nilai literal atau Anda dapat menggunakan dua jenis wildcard:

  • (:num) akan cocok dengan segmen yang hanya berisi angka.
  • (:any) akan cocok dengan segmen yang berisi karakter apa pun.

Catatan: Rute akan berjalan sesuai urutan yang ditentukan. Rute dibaca dari yang paling awal dalam kode menuju paling akhir. Urutan rute paling akhir, akan menimpa urutan yang ada sebelumnya apabila memiliki kunci (key) yang sama.

Contoh

Berikut adalah beberapa contoh perutean:

$routes['produk'] = "products";

URL yang berisi kata "produk" di segmen pertama akan dipetakan ulang ke kelas "produk".

$routes['produk/ojan'] = "products/detail/15";

URL yang berisi segmen produk/ojan akan dipetakan kembali ke kelas "produk" dan metode "detail". ID akan disetel ke "15".

$routes['product/(:any)'] = "catalog/product_lookup";

URL dengan "produk" sebagai segmen pertama, dan apa pun di segmen kedua akan dipetakan ulang ke kelas "katalog" dan metode "pencarian_produk".

$routes['product/(:num)'] = "catalog/product_lookup_by_id/$1";

URL dengan "product" sebagai segmen pertama, dan nomor di segmen kedua akan dipetakan ulang ke kelas "katalog" dan metode "product_lookup_by_id" meneruskan kecocokan sebagai variabel ke fungsi.

Penting: jangan tambahkan garis miring (/) pada awalan atau akhiran .


Reserved Routes (Rute Tercadang)

Ada dua rute yang Rute Tercadang didalam seme Framework, yaitu:

$routes['home'] = 'home';

Rute ini menunjukkan kelas pengontrol mana yang harus dimuat jika URI tidak berisi data, yang akan terjadi ketika orang memuat URL root Anda. Dalam contoh di atas, kelas "selamat datang" akan dimuat. Anda dianjurkan untuk selalu memiliki rute default jika tidak, halaman 404 akan muncul secara default.

$routes['notfound'] = 'notfound';

Rute ini menunjukkan kelas pengontrol mana yang harus dimuat jika pengontrol yang diminta tidak ditemukan. Secara default akan dijalankan app/controller/notfound.php. Anda dapat mengubahnya jika perlu.

Penting: Rute cadangan harus berada pada posisi paling awal sebelum rute global (WildCards).

Rute cadangan lainnya adalah rute rahasia admin. Silakan merujuk ke Rute untk Admin untuk menggunakan perutean rahasia admin.