Tutorial Laravel #5: Controller di Laravel
1. Apa itu Controller?
Controller adalah tempat untuk menaruh logika aplikasi. Daripada menulis semua logika langsung di route (yang akan jadi berantakan di project besar), kita pisahkan ke class Controller. Controller menerima request dari route, memproses data, dan mengembalikan response.
Pola ini adalah bagian dari arsitektur MVC: Model-View-Controller.
2. Membuat Controller
# Buat controller kosong
php artisan make:controller ArtikelController
# Buat resource controller (sudah ada method CRUD)
php artisan make:controller ArtikelController --resource
# Buat controller dengan model terhubung
php artisan make:controller ArtikelController --model=Artikel
File controller akan dibuat di app/Http/Controllers/ArtikelController.php.
3. Controller Dasar
<?php
// app/Http/Controllers/ArtikelController.php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ArtikelController extends Controller
{
// Menampilkan daftar artikel
public function index()
{
$artikels = [
['id' => 1, 'judul' => 'Belajar Laravel'],
['id' => 2, 'judul' => 'Belajar Blade'],
];
return view('artikel.index', ['artikels' => $artikels]);
}
// Menampilkan form tambah
public function create()
{
return view('artikel.create');
}
// Menampilkan detail artikel
public function show(string $id)
{
return view('artikel.show', ['id' => $id]);
}
}
4. Menghubungkan Route ke Controller
// routes/web.php
use AppHttpControllersArtikelController;
// Single action
Route::get('/artikel', [ArtikelController::class, 'index'])->name('artikel.index');
Route::get('/artikel/buat', [ArtikelController::class, 'create'])->name('artikel.create');
Route::get('/artikel/{id}', [ArtikelController::class, 'show'])->name('artikel.show');
// Resource route - daftarkan semua route CRUD sekaligus
Route::resource('artikel', ArtikelController::class);
5. Mengakses Request di Controller
public function store(Request $request)
{
// Ambil semua input
$semua = $request->all();
// Ambil input spesifik
$judul = $request->input('judul');
$judul = $request->judul; // cara singkat, hasil sama
// Ambil dengan nilai default
$status = $request->input('status', 'draft');
// Cek apakah ada input
if ($request->has('gambar')) {
// proses gambar
}
// Ambil hanya beberapa field
$data = $request->only(['judul', 'konten', 'status']);
// Ambil semua kecuali beberapa field
$data = $request->except(['_token', '_method']);
}
6. Mengembalikan Response
// Kembalikan view
return view('artikel.index');
// Kembalikan dengan data
return view('artikel.show', compact('artikel'));
// Redirect
return redirect('/artikel');
return redirect()->route('artikel.index');
return redirect()->back();
// Redirect dengan flash message
return redirect()->route('artikel.index')
->with('success', 'Artikel berhasil disimpan!');
// Kembalikan JSON
return response()->json(['status' => 'ok', 'data' => $artikel]);
// Kembalikan dengan status code
return response()->json(['message' => 'Not Found'], 404);
7. Single Action Controller
Untuk controller yang hanya punya satu aksi, gunakan method __invoke():
<?php
namespace AppHttpControllers;
class WelcomeController extends Controller
{
public function __invoke()
{
return view('welcome');
}
}
// Daftarkan route tanpa menyebut method
Route::get('/', WelcomeController::class);
8. Ringkasan
- Controller dibuat dengan
php artisan make:controller NamaController - Controller disimpan di
app/Http/Controllers/ - Hubungkan route ke controller dengan array
[NamaController::class, 'namaMethod'] - Gunakan
$request->input()untuk mengambil data dari user - Return view, redirect, atau JSON sebagai response
Tutorial berikutnya membahas view dan Blade template dasar di Laravel.
.jpg)
