#7: Membuat Rumah untuk Kategori (Controller) – CategoryController
Halo, Arsitek Kode!
Di tutorial sebelumnya, kita belajar membuat rute (jalan tol) yang menghubungkan URL ke halaman. Tapi jika kita terus menulis semua logika di file routes/web.php, file itu akan menjadi sangat panjang dan berantakan. Bayangkan jika semua resep masakan ditulis di satu kertas – pasti repot, kan? Di Laravel, kita punya Controller sebagai "rumah" tempat kita menulis semua logika aplikasi. Controller akan mengatur alur data dari database ke tampilan, dan rute hanya bertugas memanggil controller.
- Memahami apa itu Controller dan fungsinya.
- Membuat
CategoryControllermenggunakan perintah Artisan. - Menambahkan method
index()untuk menampilkan daftar kategori. - Menghubungkan rute ke controller, bukan ke fungsi anonim.
- Menampilkan data kategori dari database ke view (menggunakan Model).
Apa Itu Controller?
Controller adalah kelas (seperti cetakan) yang berisi method-method (fungsi) untuk menangani permintaan. Misalnya:
index()→ menampilkan daftar kategori.create()→ menampilkan form tambah kategori.store()→ menyimpan kategori baru ke database.edit()→ menampilkan form edit kategori.update()→ memperbarui kategori.destroy()→ menghapus kategori.
Dengan controller, kita bisa mengelompokkan semua logika yang berhubungan dengan "kategori" dalam satu tempat yang rapi. Di Laravel, controller disimpan di folder app/Http/Controllers.
Langkah 1: Membuat Controller dengan Artisan
Buka terminal Laragon, pastikan kamu berada di folder proyek situs-berita. Kemudian jalankan perintah:
php artisan make:controller CategoryController
Perintah ini akan membuat file baru di app/Http/Controllers/CategoryController.php. Buka file tersebut dengan editor. Isinya kira-kira seperti ini:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CategoryController extends Controller
{
//
}
Kita akan mengisi bagian // dengan method-method yang dibutuhkan.
Langkah 2: Menambahkan Method Index
Ubah isi CategoryController.php menjadi seperti berikut:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CategoryController extends Controller
{
public function index()
{
return "Ini adalah halaman daftar kategori (sementara)";
}
}
Method index() ini nantinya akan mengembalikan tampilan daftar kategori. Untuk sekarang, kita kembalikan teks biasa dulu agar mudah diuji.
Langkah 3: Menghubungkan Rute ke Controller
Sekarang kita harus memberi tahu Laravel: ketika seseorang mengunjungi /kategori, panggil method index() di CategoryController.
Buka file routes/web.php. Hapus atau komentar rute /kategori yang menggunakan fungsi anonim (yang kita buat sebelumnya). Ganti dengan yang baru:
use App\Http\Controllers\CategoryController;
Route::get('/kategori', [CategoryController::class, 'index']);
Penjelasan: [CategoryController::class, 'index'] artinya "panggil method index dari controller CategoryController".
use di bagian atas file agar Laravel tahu di mana controller itu berada.Langkah 4: Uji Coba
Pastikan server Laravel berjalan (php artisan serve). Buka browser dan akses http://localhost:8000/kategori. Kamu akan melihat teks: "Ini adalah halaman daftar kategori (sementara)". Selamat! Sekarang rute sudah terhubung ke controller.
Langkah 5: Mengambil Data dari Database (Menggunakan Model)
Kita sudah punya tabel categories dengan data contoh (Teknologi, Olahraga). Sekarang kita ingin menampilkan data tersebut di halaman. Untuk itu, kita perlu Model. Model adalah jembatan antara database dan controller.
Jalankan perintah:
php artisan make:model Category
Ini akan membuat file app/Models/Category.php. Buka file tersebut, isinya sangat sederhana:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
use HasFactory;
}
Model ini akan secara otomatis terhubung ke tabel categories (aturan penamaan: nama model singular, tabel plural). Kita tidak perlu menulis apa pun lagi untuk saat ini.
Kembali ke CategoryController. Ubah method index() menjadi:
use App\Models\Category; // tambahkan di atas
public function index()
{
$categories = Category::all(); // ambil semua data dari tabel categories
return view('kategori', compact('categories')); // kirim data ke view
}
Penjelasan: Category::all() mengambil semua baris dari tabel categories. Data tersebut disimpan dalam variabel $categories dan dikirim ke view kategori.blade.php menggunakan compact('categories').
Langkah 6: Menampilkan Data di View
Sekarang kita perlu mengubah file view resources/views/kategori.blade.php agar bisa menampilkan data kategori yang dikirim dari controller.
Buka resources/views/kategori.blade.php dan ubah isinya menjadi:
<!DOCTYPE html>
<html>
<head>
<title>Daftar Kategori</title>
<style>
body { font-family: Arial; margin: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1>Daftar Kategori Berita</h1>
<table>
<thead>
<th>ID</th>
<th>Nama Kategori</th>
<th>Slug</th>
</thead>
<tbody>
@foreach ($categories as $category)
{{ $category->id }}
{{ $category->name }}
{{ $category->slug }}
@endforeach
</tbody>
</table>
</body>
</html>
Kode di atas menggunakan Blade (template engine Laravel). @foreach digunakan untuk mengulang setiap kategori yang ada di $categories. {{ ... }} digunakan untuk menampilkan nilai properti.
Langkah 7: Lihat Hasilnya!
Buka browser di http://localhost:8000/kategori. Sekarang kamu akan melihat daftar kategori yang ada di database (misalnya Teknologi, Olahraga) dalam bentuk tabel. Hebat! 🎉
Ringkasan dan Konsep Penting
- Controller adalah tempat kita menulis logika aplikasi. Dibuat dengan
php artisan make:controller NamaController. - Model adalah jembatan ke tabel database. Dibuat dengan
php artisan make:model NamaModel. Model Category akan otomatis terhubung ke tabelcategories. - Rute di
web.phpmenggunakan sintaks[NamaController::class, 'method']untuk memanggil controller. - Data dikirim dari controller ke view menggunakan
view('nama_view', compact('variabel')). - Di view (file Blade), kita bisa menampilkan data dengan
{{ $variabel->properti }}dan melakukan perulangan dengan@foreach.
🚀 Apa Selanjutnya?
Kita sudah berhasil menampilkan daftar kategori. Langkah selanjutnya adalah menambahkan fitur tambah kategori (Create) melalui form. Kita akan membuat method create() untuk menampilkan form, dan store() untuk menyimpan ke database. Kita juga akan mulai menggunakan Layout Blade agar tampilan lebih rapi.
📝 Seri Tutorial Laravel 13 Pemula – Proyek Web Berita
✨ Selanjutnya: #8: Membuat Form Isi Data (Create & Store) – Memasukkan Nama Kategori