Named routes adalah fitur di NexaUI yang memungkinkan Anda untuk memberikan nama pada route, sehingga Anda dapat menghasilkan URL atau melakukan redirect ke route tersebut tanpa harus mengandalkan URL hardcoded. Ini membuat aplikasi Anda lebih mudah dipelihara karena perubahan pada URL tidak akan memengaruhi kode yang menggunakannya.
Untuk memberikan nama pada route, gunakan method name()
pada definisi route:
// Route sederhana dengan nama
$router->get('users', 'UserController@index')->name('users.index');
// Route dengan parameter dan nama
$router->get('users/{id}', 'UserController@show')->name('users.show');
// Route POST dengan nama
$router->post('users', 'UserController@store')->name('users.store');
Konvensi penamaan yang umum digunakan adalah resource.action
, seperti
users.index
, users.show
, dll.
Anda dapat menghasilkan URL untuk named route menggunakan fungsi route()
:
// URL tanpa parameter
$url = route('users.index'); // Menghasilkan: /users
// URL dengan parameter
$url = route('users.show', ['id' => 1]); // Menghasilkan: /users/1
// URL dengan multiple parameters
$url = route('posts.comments.show', ['post' => 1, 'comment' => 2]); // Menghasilkan: /posts/1/comments/2
Anda dapat melakukan redirect ke named route menggunakan method redirectToRoute()
:
// Redirect tanpa parameter
return $this->redirectToRoute('users.index');
// Redirect dengan parameter
return $this->redirectToRoute('users.show', ['id' => 1]);
// Redirect dengan flash message
return $this->redirectToRoute('users.index')->with('success', 'User created successfully!');
Atau menggunakan fungsi helper redirect()
:
return redirect()->route('users.index');
return redirect()->route('users.show', ['id' => 1]);
Di dalam template, Anda dapat menggunakan fungsi route()
untuk menghasilkan URL:
<!-- Link ke route -->
<a href="{route/users.index}">All Users</a>
<!-- Link ke route dengan parameter -->
<a href="{route/users.show id=user.id}">View User</a>
<!-- Form action -->
<form method="post" action="{route/users.store}">
<!-- Form fields -->
</form>
Anda dapat menggunakan prefix nama route dengan route groups:
$router->group(['prefix' => 'admin', 'as' => 'admin.'], function ($router) {
$router->get('dashboard', 'AdminController@dashboard')->name('dashboard');
$router->get('users', 'AdminController@users')->name('users');
$router->get('settings', 'AdminController@settings')->name('settings');
});
Route di atas akan memiliki nama:
admin.dashboard
- URL: /admin/dashboard
admin.users
- URL: /admin/users
admin.settings
- URL: /admin/settings
Anda dapat menghasilkan URL untuk route tersebut seperti biasa:
$url = route('admin.dashboard'); // Menghasilkan: /admin/dashboard
Ketika Anda mendefinisikan resource controller, NexaUI secara otomatis memberikan nama pada setiap route:
$router->resource('users', 'UserController');
Ini akan menghasilkan route berikut dengan nama yang sesuai:
Method | URI | Action | Route Name |
---|---|---|---|
GET | /users | index | users.index |
GET | /users/create | create | users.create |
POST | /users | store | users.store |
GET | /users/{id} | show | users.show |
GET | /users/{id}/edit | edit | users.edit |
PUT/PATCH | /users/{id} | update | users.update |
DELETE | /users/{id} | destroy | users.destroy |
Anda dapat menggunakan nama-nama ini untuk menghasilkan URL:
$indexUrl = route('users.index');
$createUrl = route('users.create');
$showUrl = route('users.show', ['id' => 1]);
Anda dapat menyesuaikan nama route resource:
$router->resource('users', 'UserController', ['names' => [
'index' => 'admin.users',
'create' => 'admin.users.build',
'store' => 'admin.users.save',
'show' => 'admin.users.view',
'edit' => 'admin.users.modify',
'update' => 'admin.users.amend',
'destroy' => 'admin.users.remove',
]]);
Anda dapat memeriksa apakah route saat ini cocok dengan nama tertentu menggunakan
method isRoute()
:
// Di controller
if ($this->isRoute('users.show')) {
// Logic khusus untuk route users.show
}
// Dengan parameter
if ($this->isRoute('users.show', ['id' => 1])) {
// Logic khusus untuk route users.show dengan id=1
}
Di template, Anda dapat menggunakan helper is_route()
:
<!-- Menambahkan class active jika route saat ini adalah users.index -->
<a href="{route/users.index}" class="">All Users</a>
<!-- Menambahkan class active jika route saat ini adalah users.show dengan id tertentu -->
<a href="{route/users.show id=user.id}" class="">View User</a>
Anda dapat menambahkan parameter query string tambahan saat menghasilkan URL:
// URL dengan query string
$url = route('users.index', ['sort' => 'name', 'direction' => 'asc']);
// Menghasilkan: /users?sort=name&direction=asc
// URL dengan parameter route dan query string
$url = route('users.show', ['id' => 1, 'tab' => 'profile']);
// Menghasilkan: /users/1?tab=profile
NexaUI mendukung signed URLs, yang berguna untuk membuat URL yang tidak dapat diubah:
// Menghasilkan signed URL
$url = route('users.verify', ['id' => 1])->signed();
// Menghasilkan: /users/verify/1?signature=eyJpdiI6IlhYWFg...
// Menghasilkan signed URL dengan waktu kedaluwarsa
$url = route('users.verify', ['id' => 1])->signedExpires(now()->addHours(24));
// Menghasilkan: /users/verify/1?expires=1234567890&signature=eyJpdiI6IlhYWFg...
Di controller, Anda dapat memverifikasi apakah request memiliki signature yang valid:
public function verify(Request $request, $id)
{
if (!$request->hasValidSignature()) {
abort(403, 'URL signature is invalid');
}
// Proses verifikasi
}
Secara default, fungsi route()
menghasilkan URL relatif. Untuk menghasilkan
URL absolut, gunakan method absolute()
:
// URL relatif
$url = route('users.index'); // Menghasilkan: /users
// URL absolut
$url = route('users.index')->absolute(); // Menghasilkan: https://example.com/users
Untuk meningkatkan performa, NexaUI mendukung route caching. Ini sangat berguna untuk aplikasi dengan banyak route:
// Cache route
php nexa route:cache
// Clear route cache
php nexa route:clear
Perhatikan bahwa route cache hanya bekerja jika semua route Anda menggunakan controller class, bukan closure.
resource.action
untuk memudahkan pemahaman dan pemeliharaan.
Named routes adalah fitur yang powerful di NexaUI yang membantu Anda menghasilkan URL dan melakukan redirect tanpa hardcoding URL. Ini membuat aplikasi Anda lebih mudah dipelihara dan lebih fleksibel terhadap perubahan struktur URL.
Dengan menggunakan named routes secara konsisten di seluruh aplikasi, Anda dapat mengubah struktur URL tanpa harus mengubah kode yang menggunakannya, yang sangat berguna untuk refactoring dan pengembangan jangka panjang.