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 method: __invoke(). Karena hanya ada satu aksi, Anda tidak perlu menyebutkan nama method saat mendaftarkan route.
Ini berbeda dengan controller biasa yang bisa punya banyak method seperti index(), store(), update(), dll.
Buat invokable controller lewat Artisan:
php artisan make:controller ShowDashboardController --invokable
Hasilnya:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ShowDashboardController extends Controller
{
public function __invoke(Request $request)
{
//
}
}
Cara Mendaftarkan ke Route
Karena hanya ada satu aksi, cara daftarkan ke route cukup langsung pakai nama class-nya:
use AppHttpControllersShowDashboardController;
Route::get('/dashboard', ShowDashboardController::class);
Bandingkan dengan controller biasa yang harus sebut method-nya:
Route::get('/dashboard', [DashboardController::class, 'index']);
Lebih ringkas, dan route-nya lebih mudah dibaca, terutama kalau ada banyak route.
Contoh Kasus Nyata
Misalnya Anda punya halaman yang menampilkan laporan bulanan. Logikanya spesifik untuk satu tujuan, tidak perlu dibagi ke beberapa method:
<?php
namespace AppHttpControllersReports;
use IlluminateHttpRequest;
use AppHttpControllersController;
use AppModelsOrder;
class MonthlyReportController extends Controller
{
public function __invoke(Request $request)
{
$month = $request->query('month', now()->month);
$year = $request->query('year', now()->year);
$orders = Order::whereMonth('created_at', $month)
->whereYear('created_at', $year)
->with('customer')
->get();
return view('reports.monthly', compact('orders', 'month', 'year'));
}
}
Route-nya:
Route::get('/reports/monthly', MonthlyReportController::class)
->middleware('auth')
->name('reports.monthly');
Rapi. Satu controller, satu tujuan.
Kapan Pakai Invokable Controller?
Invokable controller cocok untuk:
- Halaman yang hanya punya satu aksi (tampil laporan, proses webhook, generate PDF)
- Action handler — satu action spesifik yang tidak perlu dibundel dengan aksi lain
- Single-purpose endpoint yang ingin dipisah dari controller utama agar tidak membesar
Tidak cocok untuk resource yang punya banyak aksi CRUD. Untuk itu tetap pakai resource controller biasa.
Dependency Injection di Invokable Controller
Sama seperti controller biasa, Anda bisa inject service lewat constructor atau langsung di method __invoke():
<?php
namespace AppHttpControllers;
use AppServicesInvoiceService;
use IlluminateHttpRequest;
class GenerateInvoiceController extends Controller
{
public function __construct(
private InvoiceService $invoiceService
) {}
public function __invoke(Request $request)
{
$validated = $request->validate([
'order_id' => 'required|exists:orders,id',
]);
$pdf = $this->invoiceService->generate($validated['order_id']);
return response()->download($pdf);
}
}
Baca Juga
- Membuat Controller di Laravel 12: Resource, Middleware, dan Best Practice
- Routing di Laravel: Panduan Lengkap dengan Contoh Kode
Kalau Anda butuh tim untuk membangun aplikasi web berbasis Laravel, dari arsitektur sampai deployment — lihat layanan pengembangan aplikasi kami.
Artikel Lainnya di Kategori Laravel
10 November 2025
Apa Itu Event dan Listener di Laravel 12: Arsitektur Event-Driven
Salah satu ciri arsitektur Laravel yang baik: ketika sesuatu terjadi di aplikasi, komponen lain bisa “mendengarkan” dan merespons, tanpa si pengirim perlu tahu siapa yang merespons. Itulah fungsi Event dan Listener di Laravel. Artikel ini menjelaskan cara kerjanya dan bagaimana implementasinya dengan contoh nyata. Konsep Event dan Listener Event adalah kejadian yang terjadi di aplikasi: […]
Baca Artikel9 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 Artikel9 November 2025
Perbedaan Laravel Volt dan Laravel Breeze: Kapan Pakai Yang Mana?
Saat mulai proyek Laravel baru, salah satu pertanyaan yang sering muncul adalah: pakai Breeze atau Volt? Keduanya dari ekosistem Laravel, tapi perannya sangat berbeda. Artikel ini menjelaskan perbedaan Laravel Volt dan Laravel Breeze, bukan untuk memilih yang “lebih baik”, tapi untuk memahami kapan masing-masing dipakai. Laravel Breeze: Starter Kit Autentikasi Laravel Breeze adalah starter kit […]
Baca ArtikelIngin Membaca Artikel Lainnya?
Temukan lebih banyak insight dan tips tentang teknologi dan bisnis digital.
Lihat Semua Artikel