Pada controller ini method _remap
di override sedemikian rupa untuk menangani routing controller pada framework Codeigniter 3.x.
Jika controller kamu meng-extends controller ini, maka terdapat peraturan baru dalam menulis controller di CI, dan terdapat penambahan, diantaranya:
- Penamaan method HARUS menggunakan camelCase, bukan snake_case seperti biasanya.
- Parameter pada method dihitung, sehingga routing akan lebih strict.
- Fitur anotasi untuk memfilter http request method dan uri params.
Penamaan method menggunakan camelCase ini termasuk standar penulisan code pada PSR-1. Contoh
<?php
class Welcome extends StrictController
{
public function fooBarBaz()
{
exit("Foo!");
}
}
pada contoh diatas, jika kamu mengakses http://localhost/appnya/welcome/foo-bar-baz
akan memanggil method fooBarBaz
pada controller Welcome
.
Method pada controller yang menggunakan snake_case (contoh:
foo_bar_baz()
) tidak dapat diakses melalui uri, dan akan menampilkan halaman 404.
Dengan controller ini, pemberian parameter di belakang uri yg mewakili nama method tidak bisa sembarangan, tapi akan dihitung. Contoh:
<?php
class Product extends StrictController
{
public function view($url_title)
{
echo "view product {$url_title}";
}
public function list($category, $page = 1)
{
echo "view list products in category {$category} at page {$page}";
}
}
Pada contoh diatas, method view
hanya menerima sebuah parameter, dan method list
hanya menerima 1 atau 2 parameter. Contoh jika kamu mengakses:
/product/view/satu/dua
=> 404 (karena terdapat 2 parameter di uri tersebut)/product/view
=> 404 (karena tidak memiliki parameter)/product/view/satu
=> 200 (tepat 1 parameter)/product/list/laptop/1/2/3
=> 404 (karena terdapat 4 parameter)/product/list/laptop/12
=> 200 (karena tepat 2 parameter)/product/list/laptop
=> 200 (karena parameter$page
bersifat optional)
Controller ini punya kemampuan untuk membaca DocComment pada method di controller guna memfilter http request method dan parameter. Contoh:
<?php
class Product extends StrictController
{
/**
* Contoh filter http request method
* ----------------------------------------------
* @method POST|PUT
*/
public function postCreate()
{
// handle post create product
}
/**
* Contoh filter parameter
* ----------------------------------------------
* @param string $page /\d+/
*/
public function list($page = 1)
{
// handle page list product
}
/**
* Contoh filter method dan parameter
* ----------------------------------------------
* @method GET
* @param int $id /\d+/
*/
public function detail($id = 1)
{
// handle page detail product
}
}
Pada contoh diatas, method postCreate
hanya bisa diakses oleh http request POST /product/post-create
, atau PUT /product/post-create
, jika tidak akan menampilkan halaman 404.
Method list
dapat menerima semua http request method, tetapi hanya menerima parameter $page
yang bernilai numerik (regex /\d+/
), jika tidak akan menampilkan halaman 404.
Dan pada method detail
hanya menerima method GET
, parameter $id
harus berupa numerik, dan parameter $id
nantinya akan otomatis menjadi integer.