Tutorial Laravel 9 - Part #3 - Route Parameter, Naming dan Groups

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