Route parameters memungkinkan Anda menangkap segmen dari URL dan meneruskannya ke controller. Ini sangat berguna untuk membuat URL dinamis seperti halaman profil pengguna, detail produk, atau artikel blog.
Di NexaUI, route parameters didefinisikan dengan menggunakan kurung kurawal {parameter}
dalam definisi route:
// Route dengan satu parameter
$router->add('/users/{id}', 'UserController@show');
// Route dengan beberapa parameter
$router->add('/blog/2025/{month}/{slug}', 'BlogController@show');
Dalam contoh di atas, {id}
, 2025
, {month}
, dan {slug}
adalah route parameters yang akan menangkap nilai dari segmen URL yang sesuai.
Parameter yang ditangkap dari URL akan diteruskan ke method controller yang sesuai. Ada beberapa cara untuk mengakses parameter ini:
Parameter route akan diteruskan ke method controller sesuai urutan dalam URL:
// UserController.php
public function show($id) {
// $id berisi nilai dari {id} dalam URL
$user = $this->userRepository->find($id);
$this->render('user/profile', ['user' => $user]);
}
Untuk route dengan beberapa parameter, mereka akan diteruskan sesuai urutan:
// BlogController.php
public function show($year, $month, $slug) {
// $year, $month, dan $slug berisi nilai dari URL
$article = $this->blogRepository->findBySlug($year, $month, $slug);
$this->render('blog/article', ['article' => $article]);
}
NexaUI juga menyediakan method getSlug()
untuk mengakses parameter berdasarkan posisinya:
// BlogController.php
public function show() {
$year = $this->getSlug(1); // Parameter pertama
$month = $this->getSlug(2); // Parameter kedua
$slug = $this->getSlug(3); // Parameter ketiga
$article = $this->blogRepository->findBySlug($year, $month, $slug);
$this->render('blog/article', ['article' => $article]);
}
Anda dapat membuat parameter opsional dengan menambahkan tanda tanya (?) setelah nama parameter:
// Parameter opsional
$router->add('/products/{category?}', 'ProductController@index');
Dalam controller, Anda perlu memeriksa apakah parameter tersedia:
public function index($category = null) {
if ($category) {
$products = $this->productRepository->findByCategory($category);
} else {
$products = $this->productRepository->findAll();
}
$this->render('products/index', ['products' => $products]);
}
NexaUI memungkinkan Anda membatasi format parameter dengan pola regex:
// Parameter hanya menerima angka
$router->add('/users/{id:[0-9]+}', 'UserController@show');
// Parameter hanya menerima huruf dan angka
$router->add('/articles/{slug:[a-zA-Z0-9-]+}', 'ArticleController@show');
Ini membantu memvalidasi format parameter dan mencegah route matching yang tidak diinginkan.
NexaUI mendukung beberapa format parameter khusus untuk kasus umum:
// Parameter tahun (empat digit)
$router->get('{Y}/{params}', 'Frontend/BlogController@detail');
// Parameter bulan (dua digit)
$router->get('{Y}/{m}/{params}', 'Frontend/BlogController@detail');
// Parameter tanggal (dua digit)
$router->get('{Y}/{m}/{d}/{params}', 'Frontend/BlogController@detail');
Parameter khusus ini memudahkan pembuatan URL untuk konten yang diorganisir berdasarkan tanggal.
Untuk kasus yang lebih kompleks, NexaUI menyediakan resource mappings yang dapat dikonfigurasi di controller:
protected function init(): void {
parent::init();
$this->addResourceMappings([
$this->getSlug(1) => 'page',
$this->getSlug(2) => 'subpage',
]);
}
Ini memungkinkan Anda memetakan parameter ke nama yang lebih bermakna dan mengaksesnya dengan method yang sesuai.