URL atau rute pada aplikasi web merupakan bagian yang akan selalu ada karena berfungsi sebagai alamat dari suatu halaman. Dalam aplikasi yang dibangun menggunakan Laravel, pengrutean atau Routing adalah fitur yang dibuat dari awal, tetapi saat proyek terus berkembang, pengelolaan rute akan terasa cukup menyulitkan, karena akan terus bertambah setiap barisnya. Jika tidak dikelola dengan baik, mencari satu rute saja dapat memakan waktu.
Beruntungnya ada beberapa cara yang dapat membuat isi file rute lebih ringkas dan lebih nyaman dilihat, seperti melakukan pengelompokkan atau grouping pada rute dan lainnya. Berikut adalah beberapa cara mengelola rute di Laravel agar terkelola dengan baik dan rapi.
1. Menggunakan Route::resource dan Route::apiResource
Jika kamu memiliki satu Model yang terdapat aksi CRUD, pertimbangkan untuk mengelompokkannya dengan memanfaatkan fitur Resource Controller yang dimiliki oleh Laravel. Contohnya, alih-alih kamu mendefinisikan rute satu per satu seperti berikut:
Route::get('/users', [UserController::class, 'index']);
Route::get('/users/create', [UserController::class, 'create']);
Route::post('/users', [UserController::class, 'store']);
Route::get('/users/{user}', [UserController::class, 'show']);
Route::get('/users/{user}/edit', [UserController::class, 'edit']);
Route::put('/users/{user}', [UserController::class, 'update']);
Route::delete('/users/{user}', [UserController::class, 'destroy']);
Maka, lebih baik gunakan satu baris kode ini saja:
Route::resource('users', UserController::class);
Fungsi resource()
tersebut telah menyediakan setiap rute yang sebelumnya didefinisikan per baris. Untuk melihat rute apa saja yang disediakan dengan menggunakan resource()
, jalankan perintah:
php artisan route:list
Begitu juga saat kamu membuat RESTful API menggunakan Laravel, untuk membuat endpoint yang lengkap memiliki aksi CRUD, bisa menggunakan:
Route::apiResource('users', UserController::class);
Kamu juga bisa mengkustom rute tersebut, misalnya jika hanya ingin menggunakan rute untuk mengambil semua record (list) dan satu record (detail) tertentu saja:
Route::apiResource('users', UserController::class)->only(['index', 'show']);
Selengkapnya mengenai fitur Resource Controller bisa dipelajari pada halaman dokumentasi Laravel.
Jika kamu ingin memahami lebih dalam cara implementasi CRUD di Laravel, kamu bisa membaca artikel Tutorial Laravel: CRUD RESTful API Sederhana untuk Pemula.
2. Mengelompokkan Rute Menggunakan group()
Gunakan fungsi group()
untuk mengelompokkan rute tertentu. Agar lebih rapi, pastikan rute yang dikelompokkan memiliki keterkaitan satu sama lain. Misalnya, rute tersebut memiliki Controller, Middleware, atau Prefix yang sama.
// Contoh grouping berdasarkan Controller saja
Route::controller(PostController::class)
->group(function () {
Route::get('/posts', 'index');
});
// Contoh grouping berdasarkan Controller, Middleware, dan Prefix
Route::controller(CommentController::class)
->middleware('auth.token')
->prefix('comments')
->group(function () {
Route::delete('/{comment}', 'index');
});
Bahkan, kamu bisa membuat mengelompokkan rute dengan group()
di dalam group()
lagi seperti berikut:
Route::controller(CategoryController::class)
->group(function () {
Route::prefix('categories')
->group(function () {
Route::middleware('auth.token')
->group(function () {
Route::get('/', 'index');
Route::get('/{category}', 'show');
});
Route::middleware(['auth.token', 'auth.admin'])
->group(function () {
Route::post('/', 'store');
Route::put('/{category}', 'update');
Route::delete('/{category}', 'destroy');
});
});
});
3. Memisahkan ke File Terpisah
Cara terakhir adalah dengan membuatnya secara modular atau memisahkan setiap rute yang telah dikelompokkan berdasarkan kriteria tertentu ke dalam file rute terpisah kemudian mengimpornya ke dalam file web.php
atau api.php
default yang ada di Laravel.
Misalnya, terdapat rute khusus untuk admin yang telah dikelompokkan, agar rute tersebut tidak tercampur dengan rute lain maka simpan saja di file terpisah yang berada di folder yang sama dengan file rute default milik Laravel. Sehingga di dalam folder routes
akan seperti ini:
routes
- web.php
- admin.php
Di dalam file admin.php
berisi rute-rute untuk admin.
<?php
use App\Http\Controllers\MemberController;
Route::controller(MemberController::class)
->middleware(['auth.token', 'auth.admin'])
->prefix('members')
->group(function () {
Route::post('', 'store');
Route::delete('/{member}', 'destroy');
});
Kemudian, buka web.php
dan imporlah file admin.php
seperti berikut:
<?php
use Illuminate\Support\Facades\Route;
require __DIR__ . '/admin.php';
Dengan cara ini setiap rute akan lebih mudah dikelola karena memiliki filenya tersendiri. Kamu juga dapat memanfaatkan teknik ini untuk menyesuaikan rute khusus seperti slug. Selengkapnya dapat dilihat di artikel Tutorial Laravel: Membuat Slug Otomatis dan Unik.
Kesimpulan
Mengelola rute dengan cara yang baik dan rapi memberikan banyak manfaat, terutama dalam mempermudah pengembangan aplikasi web jangka panjang. Dengan menggunakan teknik seperti Route::resource
atau Route::apiResource
, pengelompokan menggunakan group()
, dan memisahkan rute ke dalam file terpisah, kamu tidak hanya menjaga struktur kode tetap teratur tetapi juga menghemat waktu saat menambah atau memperbarui rute.
Selain itu, struktur rute yang rapi membuat aplikasi lebih mudah dipahami oleh anggota tim lain atau saat ada pengembang baru yang bergabung. Proses debugging juga menjadi lebih cepat karena rute mudah ditemukan. Jika aplikasi kamu semakin besar, langkah-langkah ini menjadi semakin penting.
Terakhir, jangan lupa untuk memperhatikan tampilan halaman error pada aplikasi kamu. Membuat halaman error yang informatif dan menarik akan memberikan pengalaman yang lebih baik bagi pengguna. Kamu bisa membaca lebih lanjut di Tutorial Laravel: Mengubah Tampilan Halaman Error. Dengan semua tips ini, pengelolaan rute di Laravel akan menjadi lebih mudah dan efisien.