PHP memang memungkinkan kita membangun aplikasi web dari nol: satu berkas .php, sebuah web server, dan database sudah cukup untuk membuat halaman yang bisa diakses orang. Namun begitu aplikasi tumbuh, kita menemui masalah yang sama berulang-ulang: bagaimana memetakan URL ke kode, bagaimana mengelola koneksi database, bagaimana menjaga session login tetap aman, dan bagaimana menguji semua fitur tersebut secara otomatis. Framework lahir untuk menyelesaikan masalah-masalah berulang itu, dan Laravel adalah framework PHP yang akan kita gunakan sepanjang Course ini. Chapter ini membahas definisi Laravel, posisinya di ekosistem PHP, dan apa yang membedakannya dari PHP murni.
Definisi Laravel #
Laravel adalah web application framework open-source berlisensi MIT yang dibangun di atas bahasa PHP. Taylor Otwell merilis Laravel pertama kali pada tahun 2011, dan framework ini berkembang menjadi salah satu framework PHP paling banyak dipakai di dunia. Dokumentasi resmi menjelaskan Laravel sebagai framework dengan sintaks yang ekspresif dan elegan — maksudnya, kode yang kita tulis mendeklarasikan apa yang ingin dicapai tanpa membebani kita dengan detail mekanis. Saat Course ini ditulis, versi terbaru adalah Laravel 13, dirilis pada Maret 2026.
Secara teknis, Laravel adalah kumpulan komponen PHP yang saling terintegrasi dan dibangun di atas komponen-komponen framework Symfony. Laravel mengadopsi pola arsitektur Model-View-Controller (MVC) untuk mengorganisasi kode, dan menyediakan fondasi-fondasi berikut secara bawaan:
| Komponen | Peran dalam aplikasi |
|---|---|
| Routing engine | Memetakan URL ke kode yang menangani request |
| Service container | Mengelola dependency antar class (dependency injection) |
| Eloquent ORM | Abstraksi database relasional berbasis class Model |
| Migration | Version control untuk skema database |
| Blade | Templating engine untuk merender halaman HTML |
| Queue & scheduling | Menjalankan tugas berat di latar belakang |
| Dukungan testing | Pengujian otomatis dengan PHPUnit atau Pest |
PHP Murni versus Framework #
Cara paling cepat memahami peran framework adalah dengan membandingkan kode yang harus kita tulis dengan dan tanpa framework. Mari kita mulai dari halaman “halo” versi PHP murni:
<?php
// halo.php — halaman "halo" versi PHP murni
$nama = $_GET['nama'] ?? 'Dunia';
header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html lang="id">
<head><title>Halaman Sederhana</title></head>
<body>
<h1>Halo, <?= htmlspecialchars($nama) ?>!</h1>
</body>
</html>
Berkas di atas berdiri sendiri tanpa framework, sehingga kita bisa langsung menjalankannya dari terminal:
php halo.phpOutput yang Dihasilkan:
<!DOCTYPE html>
<html lang="id">
<head><title>Halaman Sederhana</title></head>
<body>
<h1>Halo, Dunia!</h1>
</body>
</html>Mari kita telaah apa yang dilakukan berkas tersebut:
- Baris
$_GET['nama'] ?? 'Dunia': membaca query string URL (?nama=Budi) dan memberi nilai cadangan'Dunia'saat query string tidak ada. - Baris
header(...): mengatur HTTP headerContent-Typesecara manual sebelum output dicetak. - Tag
<?= htmlspecialchars($nama) ?>: mencetak nilai variabel ke HTML setelah di-escape agar aman dari serangan XSS.
Untuk satu halaman, kode ini masih wajar. Masalahnya, skrip seperti ini menangani semua tanggung jawab sendiri: membaca input, mengamankan output, mencetak HTML. Begitu ada halaman kedua, ketiga, dan seterusnya, kita harus menulis ulang mekanisme yang sama — belum lagi routing antar halaman, koneksi database, session, dan proteksi CSRF yang harus dirakit manual.
Sekarang bandingkan dengan versi Laravel untuk halaman yang setara:
<?php
use Illuminate\Support\Facades\Route;
// routes/web.php — halaman "halo" versi Laravel
Route::get('/halo', fn () => 'Halo, Dunia!');Satu baris deklarasi route sudah cukup: Laravel yang menangani pembacaan query string, pengaturan header Content-Type, pengiriman response, dan penyediaan struktur direktori untuk semua halaman berikutnya. Kita akan membuktikan sendiri route semacam ini bekerja pada chapter terakhir Section ini. Perbedaan utamanya bukan sekadar jumlah baris, melainkan pemisahan tanggung jawab: kita mendeklarasikan maksud (URL /halo mengembalikan teks sapaan), sementara framework menyediakan mekanismenya.
Posisi Laravel di Ekosistem PHP #
Laravel didistribusikan sebagai paket Composer di Packagist, sama seperti ribuan paket PHP lainnya, sehingga proyek Laravel pun bisa memasang paket ekosistem PHP secara bebas. Bagi kita, ini berarti Laravel bukan pulau terisolasi: seluruh ekosistem paket PHP dapat dipakai, dan sebagian besar paket populer bahkan menyediakan integrasi khusus Laravel.
Panduan lengkap instalasi tersedia di dokumentasi resmi Laravel , sedangkan siklus rilis dan kebijakan support versi sudah kita bahas pada chapter Versi Laravel. Seluruh contoh kode di Course ini diuji pada Laravel 13.36, sehingga hasil yang Anda lihat di terminal akan konsisten dengan materi.
Dengan definisi dan posisi Laravel yang sudah jelas, pertanyaan berikutnya adalah praktis: mengapa kita sebaiknya memilih Laravel alih-alih framework lain atau PHP murni — topik yang kita bedah pada chapter berikutnya.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
halo.php
Unduh berkas<?php
// halo.php — halaman "halo" versi PHP murni
// Jalankan dengan: php halo.php
$nama = $_GET['nama'] ?? 'Dunia';
header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html lang="id">
<head><title>Halaman Sederhana</title></head>
<body>
<h1>Halo, <?= htmlspecialchars($nama) ?>!</h1>
</body>
</html>