BAB 4: Fitur Laravel
Gambaran menyeluruh fitur-fitur utama yang membuat Laravel unggul dibanding framework PHP lainnya.
Di bab sebelumnya kita sudah memahami bagaimana Laravel berpikir — alur MVC, lifecycle sebuah request, dan peran Service Container. Pemahaman itu penting, tapi sejauh ini masih terasa abstrak. Sekarang waktunya melihat apa yang bisa Laravel lakukan: fitur-fitur konkret yang akan kamu gunakan setiap hari saat membangun SimpanNotes.
Bab ini bukan manual lengkap — masing-masing fitur punya babnya sendiri. Yang kita lakukan di sini adalah tur singkat: kenali dulu wajahnya, baru nanti kita dalami satu per satu.
Routing yang Ekspresif
Routing adalah titik masuk semua request. Laravel menyediakan cara mendefinisikan rute yang bisa dibaca seperti kalimat biasa:
// routes/web.php
Route::get('/catatan', [CatatanController::class, 'index']);
Route::post('/catatan', [CatatanController::class, 'store']);
Route::get('/catatan/{id}', [CatatanController::class, 'show']);
Route::delete('/catatan/{id}', [CatatanController::class, 'destroy']);
Empat baris di atas mendefinisikan empat endpoint dengan method HTTP yang berbeda. Jika kamu pernah bekerja dengan PHP murni dan harus memeriksa $_SERVER['REQUEST_METHOD'] secara manual, kamu akan langsung merasakan bedanya.
Laravel juga punya Route::resource() yang secara otomatis menghasilkan tujuh rute standar CRUD hanya dari satu baris:
Route::resource('catatan', CatatanController::class);
Kita akan membahas routing secara lengkap di Bab 5.
Middleware: Filter Sebelum Request Masuk
Bayangkan middleware seperti petugas keamanan di pintu masuk gedung. Setiap request yang masuk melewati satu atau beberapa lapisan filter sebelum sampai ke Controller.
// Hanya izinkan pengguna yang sudah login
Route::middleware('auth')->group(function () {
Route::get('/catatan', [CatatanController::class, 'index']);
Route::get('/catatan/buat', [CatatanController::class, 'create']);
});
Laravel menyertakan middleware bawaan untuk autentikasi, verifikasi CSRF, dan throttling request. Kamu juga bisa membuat middleware sendiri untuk kebutuhan spesifik — misalnya memeriksa apakah pengguna punya langganan aktif sebelum mengakses fitur tertentu.
Middleware dibahas detail di Bab 6.
Blade: Template Engine yang Bersih
Blade adalah template engine bawaan Laravel. Ia memungkinkan kamu menulis PHP di dalam HTML tanpa kode yang terasa berantakan:
{{-- resources/views/catatan/index.blade.php --}}
@extends('layouts.app')
@section('content')
<h1>Semua Catatan</h1>
@forelse($catatan as $item)
<div class="card">
<h2>{{ $item->judul }}</h2>
<p>{{ $item->isi }}</p>
</div>
@empty
<p>Belum ada catatan.</p>
@endforelse
@endsection
Perhatikan @forelse — ini bukan PHP biasa, ini directive Blade. Blade mengompilasi template menjadi PHP murni dan menyimpannya dalam cache, jadi tidak ada overhead performa. Tanda {{ }} secara otomatis meng-escape output untuk mencegah serangan XSS.
Blade punya banyak directive lain: @if, @foreach, @include, @component, dan bahkan sistem layout yang membuat kamu tidak perlu mengulang HTML header/footer di setiap halaman. Kita pelajari Blade menyeluruh di Bab 11.
Eloquent ORM: Database Terasa Natural
Ini salah satu alasan terbesar developer memilih Laravel. Eloquent adalah ORM (Object-Relational Mapper) yang mengubah tabel database menjadi class PHP. Setiap tabel punya satu Model yang merepresentasikannya.
// app/Models/Catatan.php
class Catatan extends Model
{
protected $fillable = ['judul', 'isi', 'user_id'];
}
Dengan Model yang sesederhana itu, kamu langsung bisa melakukan operasi database yang lengkap:
// Ambil semua catatan
$catatan = Catatan::all();
// Cari satu catatan berdasarkan ID
$catatan = Catatan::find(1);
// Filter dengan kondisi
$catatan = Catatan::where('user_id', auth()->id())->get();
// Simpan catatan baru
Catatan::create(['judul' => 'Ide Baru', 'isi' => 'Tulis di sini...', 'user_id' => 1]);
// Update
$catatan->update(['judul' => 'Judul Diperbarui']);
// Hapus
$catatan->delete();
Tidak ada SQL yang perlu ditulis secara manual untuk operasi standar. Dan ketika kamu butuh query yang lebih kompleks, Eloquent menyediakan Query Builder yang fluent dan aman dari SQL injection.
Relasi antar tabel juga dikelola dengan elegan — Pengguna punya banyak Catatan, Catatan punya banyak Tag. Kita eksplorasi Eloquent mulai dari Bab 19.
Migrasi: Versi Kontrol untuk Database
Masalah klasik pengembangan tim: database di komputer kamu berbeda dengan database anggota tim lain. Migrasi memecahkan masalah ini.
Migrasi adalah file PHP yang mendefinisikan perubahan skema database. Setiap perubahan — buat tabel, tambah kolom, hapus indeks — didokumentasikan sebagai migrasi yang bisa dijalankan ulang di mesin mana pun:
// database/migrations/xxxx_create_catatan_table.php
public function up(): void
{
Schema::create('catatan', function (Blueprint $table) {
$table->id();
$table->string('judul');
$table->text('isi')->nullable();
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->timestamps();
});
}
Jalankan php artisan migrate, dan tabel catatan terbentuk. Anggota tim baru cukup meng-clone repositori dan menjalankan perintah yang sama — mereka langsung punya struktur database yang identik.
Migrasi dibahas lengkap di Bab 17.
Validasi Bawaan
Laravel punya sistem validasi yang komprehensif. Kamu bisa mendefinisikan aturan validasi dalam satu baris dan Laravel yang mengurus pesan error, pengiriman balik ke form, dan perlindungan dari data tidak valid:
$request->validate([
'judul' => 'required|string|max:255',
'isi' => 'required|string',
]);
Jika validasi gagal, Laravel secara otomatis mengarahkan pengguna kembali ke form dengan pesan error yang sesuai. Di View, kamu tinggal menampilkannya:
@error('judul')
<p class="error">{{ $message }}</p>
@enderror
Lebih dari 80 aturan validasi tersedia: email, unique, min, max, image, mimes, date, dan masih banyak lagi. Validasi dibahas menyeluruh di Bab 12.
Artisan CLI
Artisan adalah antarmuka command-line Laravel. Daripada membuat file secara manual, kamu generate dengan perintah:
php artisan make:model Catatan -m # Model + file migrasi
php artisan make:controller CatatanController --resource # Controller dengan 7 method
php artisan make:middleware CekLangganan # Middleware baru
php artisan migrate # Jalankan semua migrasi
php artisan serve # Jalankan dev server
php artisan tinker # REPL interaktif Laravel
Artisan juga bisa menjalankan perintah terjadwal, job queue, dan kamu bisa membuat perintah kustom sendiri. Kita kenali Artisan lebih dalam di Bab 15.
Autentikasi Siap Pakai
Membangun sistem login dari nol — hash password, manajemen sesi, remember me, reset password — bisa memakan waktu berhari-hari. Laravel menyediakan infrastruktur autentikasi yang lengkap dan siap pakai.
Dengan starter kit seperti Laravel Breeze, kamu bisa punya sistem register, login, logout, dan reset password yang berfungsi penuh dalam hitungan menit. Semua kodenya transparan dan bisa dikustomisasi sesuai kebutuhan.
Di ebook ini kita akan menggunakan Breeze untuk studi kasus di Bagian III. Kamu tidak harus memahami cara kerjanya dulu sekarang — cukup tahu bahwa Laravel sudah menyiapkan fondasi autentikasi yang solid.
Autentikasi dibahas di Bab 13, dan authorization (mengontrol apa yang boleh dilakukan pengguna yang sudah login) di Bab 14.
Penutup Bab
Tujuh fitur di atas — routing, middleware, Blade, Eloquent, migrasi, validasi, dan Artisan — adalah tulang punggung hampir semua aplikasi Laravel yang pernah dibangun. Kamu belum harus menguasai semuanya sekarang; gambaran ini cukup untuk memahami mengapa setiap bagian ebook ini disusun dalam urutan yang ada.
Mulai bab berikutnya, kita tidak lagi membahas konsep secara abstrak. Kita akan langsung ke kode, dimulai dari routing — karena semua yang terjadi di Laravel bermula dari sana.