Lewati ke konten utama

Routing

Routing merupakan suatu metode untuk memetakan URL ke action dari controller. Dengan menentukan route, Anda dapat memisahkan bagaimana aplikasi diimplementasikan dari bagaimana struktur URL-nya (permalink/slug).

Routing sebenarnya bisa dilakukan juga melalui file .htaccess dari Apache, atau sejenisnya dari web server lain. Namun FastPlaz mencoba mengakomodir semuanya, bisa dari .htaccess maupun dengan menggunakan konfigurasi routing.

Format​

Format penulisan route di Pascal seperti ini:

Route['/permalink'] := TNamaController;

Penulisan permalink dilakukan dengan regex.

Regular Expression, sering ditulis/disebut juga Regex/Regexp, adalah deretan karakter spesial yang mendefinisikan sebuah pola dalam pencarian teks.

Implementasi​

Anggap jika ada url http://domain/customer yang akan diolah oleh controller TCustomerController, maka kode pascal-nya akan seperti ini:

Route['/customer'] := TCustomerController;

Custom Routing​

Tentunya kawan-kawan pernah melihat suatu url yang panjang tapi tetap menarik dilihat karena tidak menggunakan variabel di query string, seperti ini:

https://www.fastplaz.com/2014/12/wordpress-loader-contoh-aplikasi-fastplaz/

Biasa terlihat di situs-situs berita online, blog dan sejenisnya. Routing untuk uri tersebut kurang lebih akan sepert ini:

Route['^/([0-9]+)/([0-9]+)/(.*)/$'] := TNewsController;

Demikian juga jika ingin menampilkan profil dari data kustomer menjadi http://localhost/customer/2/profile/.

// http://localhost/customer/2/profile/
Route['^/([0-9]+)/profile/$'] := TProfileModule;

// handler uri: "/customer/{id}/"
Route['^/([0-9]+)'] := TCustomersModule; Route['/'] := TCustomersModule;

Membaca Data​

Lalu bagaimana cara membaca datanya?

Mudah kok, sama seperti membaca query string seperti biasa, tetap menggunakan _GET, hanya saja kali ini menggunakan index sesuai urutan parameter regex-nya.

Misal untuk

Route['^/([0-9]+)/profile/$'] := TProfileModule;

Maka untuk membaca nilai id dari kustomer cukup dengan

var
customerID: string;

.
.
customerID := _GET['$1'];

Sedangkan untuk routing link berita seperti contoh diatas

Route['^/([0-9]+)/([0-9]+)/(.*)/$'] := TNewsController;

Maka cara membacanya:

var
newsYear, newsMonth, newsTitle: string;

.
.
newsYear := _GET['$1'];
newsMonth := _GET['$2'];
newsTitle := _GET['$3'];

Group Routing​

Cara routing dan membaca data seperti di atas adalah cara yang paling sederhana, tapi terkadang menyulitkan dalam pembacaan variabelnya karena harus mengingat urutan indeksnya.

Membaca url seperti ini

https://www.fastplaz.com/2014/12/wordpress-loader-contoh-aplikasi-fastplaz/

tentu akan lebih mudah jika langsung membaca sebagai variabel year, month dan title.

Pola routing di dalam platform FastPlaz memungkinkan hal tersebut dengan memanfaatkan named group regex. Format penulisan regex-nya adalah (?P<name>regex). Maka routing untuk URL di atas akan menjadi:

Route['^/(?P<year>[0-9]+)/(?P<month>[0-9]+)/(?P<title>.*)/$'] := TNewsController;

Sedangkan kode Pascal untuk membaca variabel tersebut akan menjadi seperti ini:

var
year, month, title: string;

.
.
year := _GET['year'];
month := _GET['month'];
title := _GET['title'];

Memang menulis routingnya akan sedikit panjang, tapi akan lebih memudahkan proses development.

FastPlaz, Ringan Tanpa Beban