Kembali ke Artikel
9 November 2025
vandyahmad24
Diperbarui: 18 April 2026

Membuat Controller di Laravel 12: Resource, API, dan Best Practice

laravel

Controller adalah salah satu komponen paling sering ditulis di Laravel. Hampir setiap fitur butuh controller: dari menampilkan halaman, menyimpan data form, sampai mengembalikan JSON untuk API.

Artikel ini membahas cara membuat controller di Laravel 12: dari controller dasar, resource controller, sampai best practice yang dipakai tim profesional.

Membuat Controller Baru

Gunakan perintah Artisan:

php artisan make:controller ArticleController

File akan dibuat di app/Http/Controllers/ArticleController.php:

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;

class ArticleController extends Controller
{
    //
}

Tambahkan method sesuai kebutuhan. Misalnya untuk menampilkan daftar artikel:

public function index()
{
    $articles = Article::latest()->paginate(10);
    return view('articles.index', compact('articles'));
}

public function show(Article $article)
{
    return view('articles.show', compact('article'));
}

Resource Controller

Kalau Anda butuh semua operasi CRUD sekaligus, pakai flag --resource:

php artisan make:controller ArticleController --resource

Laravel akan generate 7 method sekaligus: index, create, store, show, edit, update, destroy.

Daftarkan ke route dengan satu baris:

Route::resource('articles', ArticleController::class);

Ini otomatis membuat route untuk semua aksi CRUD, tidak perlu daftar satu per satu.

API Resource Controller

Untuk API yang tidak butuh halaman form (create/edit), pakai flag --api:

php artisan make:controller Api/ArticleController --api

Hasilnya hanya 5 method: index, store, show, update, destroy. Tanpa create dan edit.

Route::apiResource('articles', ApiArticleController::class);

Dependency Injection di Controller

Laravel mendukung dependency injection lewat constructor. Ini cara yang direkomendasikan untuk inject service:

<?php

namespace AppHttpControllers;

use AppServicesArticleService;
use IlluminateHttpRequest;

class ArticleController extends Controller
{
    public function __construct(
        private ArticleService $articleService
    ) {}

    public function store(Request $request)
    {
        $validated = $request->validate([
            'title'   => 'required|string|max:255',
            'content' => 'required|string',
            'status'  => 'required|in:draft,published',
        ]);

        $article = $this->articleService->create($validated);

        return redirect()->route('articles.show', $article)
                         ->with('success', 'Artikel berhasil dibuat.');
    }
}

Middleware di Controller

Di Laravel 12, cara attach middleware ke controller berubah. Tidak lagi lewat constructor, tapi lewat method middleware() di route atau lewat static method di controller:

// Di routes/web.php
Route::resource('articles', ArticleController::class)
     ->middleware('auth');

// Atau partial — hanya method tertentu
Route::resource('articles', ArticleController::class)
     ->only(['store', 'update', 'destroy'])
     ->middleware('auth');

Kalau ingin lebih granular per-method, pakai route biasa:

Route::get('/articles', [ArticleController::class, 'index']);
Route::post('/articles', [ArticleController::class, 'store'])->middleware('auth');
Route::get('/articles/{article}', [ArticleController::class, 'show']);

Form Request untuk Validasi

Untuk controller yang lebih bersih, pindahkan validasi ke Form Request:

php artisan make:request StoreArticleRequest
<?php

namespace AppHttpRequests;

use IlluminateFoundationHttpFormRequest;

class StoreArticleRequest extends FormRequest
{
    public function authorize(): bool
    {
        return auth()->check();
    }

    public function rules(): array
    {
        return [
            'title'   => 'required|string|max:255',
            'content' => 'required|string|min:100',
            'status'  => 'required|in:draft,published',
        ];
    }
}

Gunakan di controller:

public function store(StoreArticleRequest $request)
{
    $article = Article::create($request->validated());

    return redirect()->route('articles.show', $article)
                     ->with('success', 'Artikel disimpan.');
}

Controller jadi lebih ringkas karena validasi sudah diurus Form Request.

Nested Resource Controller

Kalau ada relasi hierarkis, misalnya komentar yang dimiliki artikel, gunakan nested resource:

Route::resource('articles.comments', CommentController::class);

URL yang dihasilkan: /articles/{article}/comments/{comment}

Controller-nya otomatis menerima kedua model sebagai parameter:

public function store(Request $request, Article $article)
{
    $comment = $article->comments()->create([
        'body'    => $request->validated('body'),
        'user_id' => auth()->id(),
    ]);

    return redirect()->route('articles.show', $article);
}

Baca Juga

Butuh tim untuk membangun aplikasi web berbasis Laravel dari awal? Lihat layanan pengembangan aplikasi kami.

Tag: #laravel #php #tutorial
BACA JUGA

Artikel Lainnya di Kategori Laravel

laravel Laravel

9 November 2025

Invokable Controller di Laravel: Cara Kerja, Contoh Kode, dan Kapan Memakainya

Ada satu fitur Laravel yang sering dilewatkan developer pemula: invokable controller. Padahal kalau dipakai di tempat yang tepat, kode jadi lebih bersih dan lebih mudah dibaca. Artikel ini menjelaskan apa itu invokable controller, kapan sebaiknya dipakai, dan bagaimana cara implementasinya di Laravel 12. Apa Itu Invokable Controller? Invokable controller adalah controller yang hanya punya satu […]

Baca Artikel
Laravel

9 November 2025

Keunggulan Laravel Volt: Mengapa Single-File Component Lebih Efisien

Setelah cukup banyak pakai Livewire biasa, saya coba beralih ke Volt di salah satu proyek internal. Hasilnya memang ada perbedaan yang terasa, terutama saat nambah fitur baru atau onboarding developer junior ke proyek. Artikel ini membahas keunggulan nyata Laravel Volt dibanding cara penulisan Livewire sebelumnya, lengkap dengan contoh kode perbandingan. 1. Single-File Component: Logika dan […]

Baca Artikel
Laravel

9 November 2025

Cara Instalasi Laravel Volt di Laravel 12: Via Breeze dan Livewire Langsung

Laravel Volt sudah termasuk dalam Livewire v3, jadi cara installnya lebih mudah dari yang Anda bayangkan. Artikel ini membahas dua jalur instalasi: lewat Laravel Breeze, dan langsung lewat Livewire. Prasyarat PHP 8.1 atau lebih baru Laravel 10 ke atas (disarankan Laravel 12) Composer Jalur 1: Install via Laravel Breeze Ini jalur paling umum. Breeze menyediakan […]

Baca Artikel

Ingin Membaca Artikel Lainnya?

Temukan lebih banyak insight dan tips tentang teknologi dan bisnis digital.

Lihat Semua Artikel