Sebenarnya ada banyak hal terkait Route di Laravel, akan tetapi pada kesempatan kali ini kita hanya akan membahas tentang Parameter, Naming dan Groups.
Parameter
Required Parameter
Parameter adalah informasi yang bisa kita didapatkan dari sebuah URL atau Route. Misalnya kita perlu mendapatkan id
produk ketika membuat route untuk halamn detail produk. Sehingga routenya yang kita definisikan akan seperti berikut:
Route::get('products/{id}', [ProductController::class, 'show']);
Kita dapat membuat route parameter sesuai kebutuhan kita, misal:
Route::get('products/{id}/reviews/{reviewID}', [ProductController::class, 'review']);
Optional Parameter
Kita juga dapat mendefinisikan sebuah parameter itu tidak wajib di isi dengan value. Tapi kita juga perlu mendefinisikan default value dari parameter tersebut. Contohnya adalah seperti berikut:
Route::get('/user/{name?}', function ($name = null) {
return $name;
});
Route::get('/user/{name?}', function ($name = 'John') {
return $name;
});
Membatasi Parameter dengan Regular Expression
Ada kalanya kita perlu memberikan batasan terhadap value parameter. Misalnya saja parameter id
produk hanya kita perbolehkan dengan angka saja.
Route::get('products/{id}', function ($id) {
//
})->where('id', '[0-9]+');
atau hanya menerima string dari beberapa pilihan saja:
Route::get('/category/{category}', function ($category) {
//
})->whereIn('category', ['movie', 'song', 'painting']);
Untuk lebih detailnya bisa kita baca di dokumentasi resmi laravel disini : https://laravel.com/docs/9.x/routing#parameters-regular-expression-constraints
Naming
Memang kita bisa membuat Route tanpa nama dan bisa digunakan. Misalnya seperti berikut:
Route::get('products/{id}', [ProductController::class, 'show']);
Selanjutnya kita bisa membuat url dengan cara seperti berikut:
<a href="/products/1">Show</a>
Akan tetapi, misal di kemudian hari kita ingin merubah routenya dari products
menjadi produk
, kita juga perlu melakukan perubahan disemua tempat terkait url products/{id}
menjadi produk/{id}
. Nah, hal ini bisa hindari dengan penamaan route yang spesifik. Contoh:
Route::get('products/{id}', [ProductController::class, 'show'])->name('products.show');
Dengan route tersebut, kita dapat membuat URL dengan cara seperti berikut:
// Generating URLs...
$url = route('products.show', [$productID]);
// Generating Redirects...
return redirect()->route('products.show', [$productID]);
return to_route('products.show', [$productID]);
Pembuatan URL dengan menggunakan route('name')
tidak akan terpengaruh terhadap perubahan pola route yang kita buat asal nama routenya tetap sama.
Groups
Kita dapat mengelompokkan route-route ke dalam sebuah group karena kebutuhan tertentu.
Middleware
Misal kita ingin memanggil middleware auth
untuk beberapa route yang kita definisikan:
Route::middleware(['auth'])->group(function () {
Route::get('/user/change-password', function () {
// Uses auth middleware...
});
Route::get('/user/profile', function () {
// Uses auth middleware...
});
});
Controller
Jika kita mempunyai beberapa route yang menggunakan controller yang sama, kita dapat membuat group seperti berikut:
use App\Http\Controllers\OrderController;
Route::controller(OrderController::class)->group(function () {
Route::get('/orders/{id}', 'show');
Route::post('/orders', 'store');
});
Prefix
Kita juga dapat mengelompokkan route dengan prefix tertentu, misal dengan prefix admin
:
Route::prefix('admin')->group(function () {
Route::get('/users', function () {
// Matches The "/admin/users" URL
});
});
Lengkapnya dapat kita baca di dokumentasi resmi Laravel: https://laravel.com/docs/9.x/routing#route-groups
Tulis Komentar