Halo teman-teman semuanya! Di artikel part keempat ini, kita akan melanjutkan seri "Tutorial Laravel 11 untuk Pemula" dengan mempelajari cara Membuat Model, Controller, dan Route di Laravel. Pada step ini, kita akan membangun pondasi awal yang sangat penting sebelum melanjutkan ke fitur-fitur seperti menampilkan data, menambah data, dan sebagainya. Mari kita bahas!
Apa Itu Model, Controller, dan Route di Laravel?
Model: Representasi dari data di aplikasi kita. Model berhubungan langsung dengan tabel di database dan menyediakan cara untuk berinteraksi dengan data tersebut, seperti menyimpan, mengupdate, atau menghapus data.
Controller: Tempat logika aplikasi ditulis. Controller menerima request dari user, memprosesnya, dan mengembalikan response. Controller membantu memisahkan logika dari tampilan (view).
Route: Menghubungkan URL tertentu dengan fungsi di Controller sehingga aplikasi tahu apa yang harus dilakukan saat URL diakses.
Langkah-Langkah Membuat Model, Controller, dan Route
1. Membuat Model
Model di Laravel mewakili tabel di database. Misalnya, kita akan membuat model untuk tabel products
yang sudah kita buat di part sebelumnya.
Jalankan perintah ini di terminal:
php artisan make:model Product
Perintah di atas akan membuat file model Product.php
di folder app/Models/
.
2. Menghubungkan Model dengan Tabel
Buka file Product.php
yang baru saja dibuat, lalu tambahkan properti berikut untuk menghubungkan model dengan tabel products
yang pada part sebelumnya sudah kita buat melalui migration:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Product extends Model { use HasFactory; protected $table = 'products'; // Nama tabel yang direpresentasikan oleh model ini. protected $fillable = ['image', 'name', 'description', 'price']; // Daftar kolom yang diizinkan untuk diisi secara massal (mass assignment). }
$table: Di sini, kita mendefinisikan nama tabel yang akan direpresentasikan oleh model ini. Jika nama tabel dan nama modelnya sudah sesuai, kita sebenarnya tidak perlu menuliskan properti
$table
lagi. Laravel secara otomatis akan menggunakan nama tabel yang merupakan bentuk jamak dari nama model. Misalnya, kalau model kita bernamaProduct
, Laravel akan mencari tabel dengan namaproducts
. Jadi, jika nama tabel dan modelnya sama, kita tidak perlu menambahkan$table
, kecuali kalau kita ingin menggunakan nama tabel yang berbeda.Misalnya, nama tabelnya adalah
produk
, dan kita ingin menggunakan tabel dengan nama tersebut, meskipun model kita bernamaProduct
. Maka, kita harus menambahkan properti$table
seperti ini:protected $table = 'produk';
$fillable: Properti ini digunakan untuk menentukan column mana saja yang bisa diisi secara massal (mass assignment). Dalam contoh ini, hanya kolom
image
,name
,description
, danprice
yang boleh diisi langsung saat membuat atau memperbarui dataProduct
. Kita menggunakan$fillable
untuk mencegah adanya Mass Assignment Vulnerability, di mana column yang seharusnya tidak bisa diubah oleh user, tetap bisa diisi tanpa kontrol.
Contoh: Misalnya kamu mengirimkan data lewat form untuk membuat produk baru, hanya kolom image
, name
, description
, dan price
yang bisa diisi, dan kolom lainnya tidak bisa diisi.
Intinya, jika nama tabel dan model sudah sesuai dengan konvensi Laravel, kita tidak perlu menuliskan properti $table
. Namun, kalau kita ingin menggunakan nama tabel yang berbeda dari konvensi itu, kita harus menuliskan $table
seperti pada kode di atas.
3. Membuat Controller
Controller akan menangani logika aplikasi kita. Untuk membuat controller, jalankan perintah berikut:
php artisan make:controller ProductController
Perintah ini akan membuat file ProductController.php
di folder app/Http/Controllers/
.
4. Menambahkan Function ke Controller
Untuk saat ini, kita akan membuat fungsi sederhana untuk menampilkan view dan memastikan routing dan logika dasar kita berjalan. Buka file ProductController.php
, lalu tambahkan fungsi berikut:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class ProductController extends Controller { public function index() { return view('products.index'); } }
Penjelasan:
- index(): Fungsi ini akan mengembalikan view
products.index
.
5. Menambahkan Route
Route digunakan untuk menghubungkan URL dengan fungsi di Controller. Buka file routes/web.php
dan tambahkan kode berikut:
use App\Http\Controllers\ProductController; Route::get('/products', [ProductController::class, 'index']);
Penjelasan:
- /products: URL yang akan digunakan untuk mengakses daftar produk.
- ProductController::class, 'index': Menghubungkan URL
/products
ke fungsiindex()
diProductController
.
6. Membuat View untuk Daftar Produk
Sekarang, buat file view untuk menampilkan daftar produk di folder resources/views/products
. Buat file index.blade.php
dan tambahkan kode berikut:
<!-- resources/views/products/index.blade.php --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Daftar Produk</title> </head> <body> <h1>Daftar Produk</h1> </body> </html>
Penjelasan:
- Pada file
index.blade.php
ini, kita hanya menampilkan judul dan sedikit keterangan bahwa daftar produk akan ditampilkan pada bagian selanjutnya. Nantinya, data produk akan diambil dari database dan ditampilkan di view ini pada part berikutnya.
7. Testing Route di Browser
Sekarang saatnya kita tes apakah semuanya berjalan dengan baik. Jalankan server Laravel dengan perintah php artisan serve
. Kemudian, buka browser dan akses URL berikut 127.0.0.1:8000/products
.
Jika berhasil, kamu akan melihat halaman dengan judul "Daftar Produk" seperti gambar di bawah ini:
Pada seri tutorial ini kita telah berhasil membuat model, controller, dan route yang mengarah ke view kosong. Langkah selanjutnya adalah menambahkan logika untuk menampilkan data produk dari database dan fitur lainnya yang akan dibahas pada part-part berikutnya.
Semoga tutorial ini bermanfaat dan membantu kalian dalam memahami dasar-dasar pembuatan model, controller, dan route di Laravel 11. Sampai jumpa di tutorial selanjutnya.