Laravel · Bab 2
Aturan Emas Laravel
Lima aturan baku yang menjadi penyebab lebih dari 80% kendala pemula — konvensi penamaan, impor namespace, token @csrf, $fillable, dan compact() tanpa tanda dollar.
Sebelum menulis baris kode pertama, pahami 5 aturan baku Laravel berikut. Lebih dari 80% kendala teknis yang dialami pemula disebabkan oleh pelanggaran aturan-aturan sederhana ini.
2.1 Konvensi Penamaan Otomatis
Laravel menganut prinsip Convention over Configuration: Model dan tabel terhubung otomatis lewat tata nama bahasa Inggris.
- Nama Model wajib diawali huruf kapital (PascalCase) dan berbentuk tunggal (singular). Contoh:
Category,Product,Transaction. - Nama tabel wajib huruf kecil semua (snake_case) dan berbentuk jamak (plural). Contoh:
categories,products,transactions.
Laravel menurunkan nama tabel dengan aturan jamak bahasa Inggris, termasuk bentuk tak beraturan: Model Person otomatis memakai tabel people, bukan persons.
2.2 Aturan Impor Namespace
Setiap kali memakai Class lain di dalam file Controller (misalnya Product, Category, atau DB), lokasinya wajib dideklarasikan di bagian paling atas file dengan use:
use App\Models\Product;
use App\Models\Category;
use Illuminate\Support\Facades\DB;
2.3 Wajib Token @csrf pada Form
Setiap form HTML yang memakai method POST, PUT, atau DELETE wajib menyertakan direktif @csrf tepat di bawah tag pembuka <form>:
<form action="{{ route('products.store') }}" method="POST">
@csrf
...
</form>
Token CSRF membuktikan bahwa kiriman form benar-benar berasal dari halaman aplikasimu sendiri, bukan dari situs lain yang mencoba mengirim data atas nama penggunamu (Cross-Site Request Forgery).
2.4 Proteksi Mass Assignment
Secara bawaan Laravel memblokir pengisian data otomatis lewat Model::create($data) demi keamanan (Mass Assignment Protection). Agar kolom dapat diisi, daftarkan namanya pada array $fillable di Model terkait:
protected $fillable = ['category_id', 'product_code', 'name', 'price', 'stock'];
Tanpa daftar ini, pengguna nakal bisa menambahkan kolom yang tidak seharusnya diisi (misalnya kolom peran admin) ke dalam kiriman form.
2.5 compact() Tanpa Tanda Dollar
Fungsi compact() mengirim variabel dari Controller ke View. Di dalam tanda kurung, tulis nama variabel sebagai teks (string tanpa tanda $):
- Benar:
return view('products.index', compact('products')); - Salah fatal:
return view('products.index', compact($products));
compact('products') sama artinya dengan ['products' => $products], sehingga di View tersedia variabel $products.