Tutorial Laravel #22: Resource Controller
1. Apa itu Resource Controller?
Resource controller adalah controller yang mengikuti konvensi RESTful Laravel - menyediakan 7 method standar untuk operasi CRUD: index, create, store, show, edit, update, destroy. Dengan satu baris Route::resource, semua route terdaftar otomatis.
2. Membuat Resource Controller
php artisan make:controller ArtikelController --resource
php artisan make:controller ArtikelController --resource --model=Artikel
3. Route Resource
// routes/web.php
Route::resource('artikel', ArtikelController::class);
// Lihat semua route yang dibuat
// php artisan route:list --name=artikel
Tabel route yang dihasilkan:
GET /artikel- index - artikel.indexGET /artikel/create- create - artikel.createPOST /artikel- store - artikel.storeGET /artikel/{artikel}- show - artikel.showGET /artikel/{artikel}/edit- edit - artikel.editPUT/PATCH /artikel/{artikel}- update - artikel.updateDELETE /artikel/{artikel}- destroy - artikel.destroy
4. Membatasi Route yang Dibuat
// Hanya buat route tertentu
Route::resource('artikel', ArtikelController::class)
->only(['index', 'show']);
// Buat semua kecuali yang disebutkan
Route::resource('artikel', ArtikelController::class)
->except(['destroy']);
// Resource hanya untuk API (tidak ada create dan edit)
Route::apiResource('artikel', ArtikelController::class);
5. Nested Resource
Untuk relasi seperti artikel yang punya banyak komentar:
Route::resource('artikel.komentar', KomentarController::class);
// URL: /artikel/{artikel}/komentar
// URL: /artikel/{artikel}/komentar/{komentar}
public function store(Request $request, Artikel $artikel)
{
$artikel->komentars()->create([
'konten' => $request->konten,
'user_id' => auth()->id(),
]);
return redirect()->route('artikel.show', $artikel);
}
6. Route Model Binding
Laravel secara otomatis melakukan query database saat kamu type-hint model di method controller:
// Laravel otomatis cari Artikel::where('id', $artikel)->firstOrFail()
public function show(Artikel $artikel)
{
return view('artikel.show', compact('artikel'));
}
// Custom key binding - misal cari by slug
// Di Model:
public function getRouteKeyName()
{
return 'slug'; // Laravel akan query WHERE slug = ?
}
// Di route:
Route::get('/artikel/{artikel}', [ArtikelController::class, 'show']);
// URL: /artikel/belajar-laravel akan cari slug = belajar-laravel
7. Multiple Resource Controllers
Route::resources([
'artikel' => ArtikelController::class,
'kategori' => KategoriController::class,
'tag' => TagController::class,
]);
// Semua di bawah middleware auth
Route::middleware('auth')->group(function () {
Route::resources([
'artikel' => ArtikelController::class,
'kategori' => KategoriController::class,
]);
});
8. Ringkasan
- Resource controller mengikuti konvensi RESTful dengan 7 method standar
Route::resource()membuat 7 route sekaligus dengan satu baris- Gunakan
only()atauexcept()untuk membatasi route yang dibuat - Route model binding otomatis inject model berdasarkan ID atau custom key
Tutorial berikutnya membahas pagination di Laravel.
.jpg)
