← Kembali ke tutorial
Laravel Pemula

Controller & Resource Controller di Laravel 13

27 October 2026 4 kali dibaca

Bagikan: Link disalin!
Controller & Resource Controller di Laravel 13

Halo bos! Selamat datang di artikel keempat Laravel.

Di artikel sebelumnya kita sudah belajar membuat route pakai closure (fungsi langsung di dalam routes/web.php). Cara itu cocok untuk belajar, tapi kalau aplikasi semakin besar, file route akan jadi sangat panjang dan berantakan.

Solusinya adalah Controller.

Controller adalah kelas khusus yang tugasnya menangani logika dari request. Dengan Controller, kode kita jadi lebih rapi, mudah dibaca, dan mudah dikelola.

Di artikel ini kita akan belajar dua hal penting:

  1. Cara memindahkan logic dari closure ke Controller biasa
  2. Mengenal Resource Controller + Route::resource yang sangat powerful


1. Kenapa Harus Pakai Controller?

Bayangkan kamu punya 20–30 halaman. Kalau semuanya ditulis pakai closure di web.php, file itu akan sangat panjang dan susah dibaca.

Dengan Controller:

  1. Setiap resource (Post, Category, User, dll) punya file sendiri
  2. Logic terpisah dari routing
  3. Lebih mudah di-test
  4. Lebih profesional

2. Membuat Controller Biasa

Mari kita buat Controller untuk menangani halaman post.

Jalankan perintah berikut di terminal (pastikan kamu berada di folder project):

php artisan make:controller PostController

Laravel akan membuat file baru di:

app/Http/Controllers/PostController.php

Isi default-nya kurang lebih seperti ini:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{
//
}

Sekarang mari kita isi beberapa method sederhana.

Buka file PostController.php dan ubah menjadi:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{
public function index()
{
return 'Daftar semua post (dari Controller)';
}

public function show(string $id)
{
return "Menampilkan detail post dengan ID: $id (dari Controller)";
}

public function create()
{
return 'Form tambah post baru';
}
}

3. Menghubungkan Route ke Controller

Sekarang buka file routes/web.php.

Hapus atau comment route lama yang pakai closure, lalu ganti dengan cara yang benar:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;

Route::get('/posts', [PostController::class, 'index'])->name('posts.index');
Route::get('/posts/create', [PostController::class, 'create'])->name('posts.create');
Route::get('/posts/{id}', [PostController::class, 'show'])->name('posts.show');

Penjelasan penting:

  1. [PostController::class, 'index'] artinya: panggil method index di dalam class PostController
  2. Ini adalah cara modern yang direkomendasikan di Laravel (sejak Laravel 8 ke atas, termasuk Laravel 13)

Sekarang coba akses:

  1. http://blog-sederhana.test/posts
  2. http://blog-sederhana.test/posts/create
  3. http://blog-sederhana.test/posts/5

Kalau muncul teks dari Controller, berarti sudah berhasil!


4. Resource Controller (Yang Paling Sering Dipakai)

Kebanyakan aplikasi web butuh operasi CRUD (Create, Read, Update, Delete).

Laravel punya fitur yang sangat membantu untuk ini, namanya Resource Controller.

Buat Resource Controller dengan perintah:

php artisan make:controller PostController --resource --force
Catatan: Kita pakai --force karena sebelumnya sudah ada file PostController.php. Kalau belum ada, cukup php artisan make:controller PostController --resource.

Setelah dijalankan, Laravel akan mengisi Controller dengan 7 method standar:

public function index() // Tampilkan daftar data
public function create() // Tampilkan form tambah
public function store() // Proses simpan data baru
public function show() // Tampilkan detail satu data
public function edit() // Tampilkan form edit
public function update() // Proses update data
public function destroy() // Hapus data


5. Route::resource — Satu Baris untuk 7 Route

Sekarang ganti semua route post di routes/web.php menjadi cukup satu baris:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;

Route::resource('posts', PostController::class);

Selesai.


Laravel secara otomatis akan membuat 7 route sekaligus:

Ini adalah standar RESTful yang dipakai di hampir semua aplikasi modern.


6. Melihat Hasilnya dengan route:list

Untuk memastikan semua route sudah terdaftar dengan benar, jalankan:

php artisan route:list --name=posts

Atau versi lengkap:

php artisan route:list --columns=method,uri,name,action

Kamu akan melihat ketujuh route yang sudah otomatis dibuat.


7. Tips Tambahan (Sangat Berguna)

1. Hanya ambil sebagian method saja

Kalau kamu belum butuh semua method:

Route::resource('posts', PostController::class)->only(['index', 'show']);

atau

Route::resource('posts', PostController::class)->except(['destroy']);

2. Generate Controller sekaligus dengan Model (lebih advanced)

Nanti ketika kita sudah punya Model Post, kita bisa pakai:

php artisan make:controller PostController --model=Post --resource

Ini akan otomatis menambahkan type-hint model di method show, edit, update, dan destroy (siap untuk Route Model Binding).

3. API Resource (untuk API saja)

Kalau kamu bikin API (bukan website biasa), pakai:

php artisan make:controller Api/PostController --api

dan

Route::apiResource('posts', PostController::class);

Ini hanya membuat 5 method (tanpa create dan edit).


Ringkasan

Yang perlu kamu ingat dari artikel ini:

  1. Controller membantu merapikan kode agar tidak semuanya di web.php
  2. Cara memanggil Controller: [PostController::class, 'namaMethod']
  3. Resource Controller + Route::resource adalah cara tercepat untuk membuat CRUD
  4. Satu baris Route::resource('posts', PostController::class) = 7 route sekaligus
  5. Selalu cek dengan php artisan route:list


Selanjutnya

Di Artikel 5 kita akan belajar:

Blade Templating Dasar — Layout, Include, dan Component

Kita akan mulai membuat tampilan yang rapi, memakai master layout, partial (navbar), dan component, supaya HTML tidak copy-paste terus.

Tutorial terkait