Ilustrasi monogram huruf L geometris di samping jendela terminal

Seri CodeIgniter 4 tamat di episode #72 kemarin dengan proyek CRUD yang lengkap. Kamu sekarang paham pola MVC luar dalam. Hari ini kita membuka seri baru yang paling ditunggu: Laravel, framework PHP paling populer di dunia.

Kalau CodeIgniter 4 adalah dapur rumahan yang efisien dan cepat, Laravel adalah dapur restoran lengkap: ada peralatan khusus untuk hampir semua kebutuhan, dari antrean pekerjaan (queue), penjadwalan otomatis, sampai sistem otentikasi siap pakai. Bukan berarti CodeIgniter jelek, ia tetap pilihan tepat untuk aplikasi kecil dan cepat. Tapi saat aplikasi tumbuh besar dan butuh banyak fitur bawaan, Laravel bersinar.

Kabar baiknya: kamu tidak mulai dari nol. Laravel memakai pola yang sama dengan yang sudah kamu kuasai: routing, controller, model, view. Bedanya ada di nama dan kekayaan fiturnya: Eloquent ORM, Blade template, dan Artisan CLI. Di akhir artikel ini Laravel sudah terpasang di laptopmu, dan kamu akan tur keliling "dapur restoran" barumu.

Kenapa Laravel Setelah CodeIgniter

Urutannya disengaja. CodeIgniter 4 memberimu fondasi konsep dengan gangguan minimal: kamu paham kenapa MVC ada dan bagaimana tiap bagiannya bekerja. Laravel membangun di atas fondasi itu dengan konvensi dan fitur:

  • Eloquent ORM, cara mengakses database yang lebih ekspresif dari query builder, termasuk relasi antar tabel yang ditulis seperti bahasa sehari-hari.
  • Blade, template engine bawaan yang lebih rapi dari PHP polos di view.
  • Artisan, asisten command line yang bisa membuatkan file controller, model, dan migration dengan satu perintah.
  • Ekosistem, paket resmi untuk otentikasi (Sanctum, Breeze), antrean, dan testing.

Di dunia kerja, Laravel juga membuka lebih banyak pintu: lowongan PHP di Indonesia paling banyak meminta Laravel. Jadi seri ini bukan sekadar menambah ilmu, tapi menambah nilai jualmu.

Ini meluruskan mitos pertama: "Laravel terlalu berat dan rumit untuk pemula". Memang Laravel membawa lebih banyak bawaan dibanding CodeIgniter, tapi untuk belajar dan proyek kecil ia tetap berjalan lancar di laptop biasa. Kamu juga tidak perlu menguasai semuanya sekaligus. Kuasai routing, controller, Blade, dan Eloquent dulu, sisanya dipelajari saat dibutuhkan. Framework dipelajari bertahap, bukan dihafal sekaligus.

Persiapan dan Install

Syaratnya mirip CodeIgniter: PHP 8.2 atau lebih baru dan Composer. Kalau kamu mengikuti seri CodeIgniter, keduanya sudah beres. Cara install resminya:

composer create-project laravel/laravel kantin-laravel "12.*"

Perintah ini mengunduh Laravel versi 12 ke folder kantin-laravel. Masuk ke foldernya dan nyalakan server bawaannya:

cd kantin-laravel
php artisan serve

Buka http://127.0.0.1:8000. Kalau halaman selamat datang Laravel muncul, instalasimu sukses. Perhatikan perintahnya: php artisan serve, sepupu dekat php spark serve di CodeIgniter. Pola yang sama, nama yang beda, kamu akan sering menemukan kembaran seperti ini di seri Laravel.

Tur Struktur Folder: Peta Dapur Barumu

Sekilas struktur Laravel terlihat ramai, tapi petakan ke pengetahuan CodeIgniter-mu dan ia langsung familiar:

kantin-laravel/
  app/Http/Controllers/  -- controller (mirip app/Controllers di CI4)
  app/Models/            -- model Eloquent (mirip app/Models di CI4)
  routes/web.php          -- definisi route (mirip app/Config/Routes.php)
  resources/views/        -- file Blade .blade.php (mirip app/Views)
  database/migrations/   -- migration (mirip app/Database/Migrations)
  public/                -- document root (sama seperti CI4)
  .env                   -- konfigurasi environment (sama seperti CI4)
  artisan                -- tool CLI (mirip spark di CI4)

Perbedaan filosofinya: CodeIgniter memisahkan config route di app/Config, Laravel menaruh route di folder routes tersendiri yang lebih eksplisit. View Laravel memakai ekstensi .blade.php yang menandakan ia diproses template engine Blade. Selebihnya, peta mentalmu dari CodeIgniter bisa dipakai ulang hampir mentah-mentah.

Artisan: Asisten Pribadimu

php artisan adalah tool command line Laravel. Coba php artisan list dan kamu akan melihat puluhan perintah. Untuk sekarang, hafalkan lima ini saja:

php artisan serve                  # jalankan server lokal
php artisan make:controller MenuController
php artisan make:model Menu -m     # model + migration sekaligus
php artisan migrate                # jalankan migration
php artisan route:list             # lihat semua route yang terdaftar

Berhenti dan tebak dulu! Kamu menjalankan perintah di bawah ini. File apa yang dibuat, dan di folder mana?

php artisan make:controller MenuController
Jawaban: app/Http/Controllers/MenuController.php. Artisan membuatkan file controller lengkap dengan namespace dan class dasar yang benar, jadi kamu tidak perlu menghafal kerangkanya. Prinsipnya sama seperti generator di framework mana pun: mesin mengurus hal repetitif, manusia mengurus logika. Nanti kamu akan memakai make: untuk model, migration, seeder, dan banyak lagi.

Ini juga meluruskan mitos kedua: "programmer Laravel harus hafal semua perintah artisan". Tidak ada yang menghafal puluhan perintah. Yang dipakai sehari-hari cuma segelintir: make:, migrate, serve, route:list, dan tinker (konsol interaktif untuk mencoba kode cepat). Sisanya tinggal php artisan list saat butuh.

Blade Sekilas: Template yang Rapi

Blade adalah template engine Laravel. File view berekstensi .blade.php dan menawarkan sintaks yang lebih bersih dari PHP polos:

<!-- resources/views/menu.blade.php -->
<h1>{{ $title }}</h1>

<ul>
@foreach ($menus as $m)
  <li>{{ $m['nama'] }} - Rp{{ $m['harga'] }}</li>
@endforeach
</ul>

Dua hal penting. Pertama, {{ }} otomatis melakukan escaping seperti esc() di CodeIgniter, jadi output aman dari XSS secara default. Kedua, ada sintaks {!! !!} yang tidak di-escape. Tebak kapan itu dipakai dan kapan berbahaya:

Berhenti dan tebak dulu! Apa beda {{ $nama }} dengan {!! $nama !!}, dan kapan yang kedua boleh dipakai?

Jawaban: {{ }} meng-escape HTML, {!! !!} menampilkannya mentah. Kalau $nama berisi <script> jahat, versi pertama menampilkannya sebagai teks biasa (aman), versi kedua menjalankannya (berbahaya). {!! !!} hanya boleh dipakai untuk HTML yang kamu tulis sendiri dan percayai sepenuhnya, misalnya hasil render dari library terpercaya, tidak pernah untuk input pengguna. Aturan praktisnya: selalu {{ }} kecuali kamu bisa menjelaskan kenapa butuh yang mentah.

Blade juga punya sistem layout dengan @extends, @section, dan @yield yang konsepnya identik dengan extend/section di CodeIgniter yang kamu pelajari di #69. Lagi-lagi, fondasimu terbawa.

Yang menarik, Blade dikompilasi menjadi PHP polos dan di-cache, jadi tidak ada penalti performa saat aplikasi berjalan. Kamu menulis sintaks yang rapi dan ekspresif, Laravel menerjemahkannya menjadi kode PHP biasa di balik layar. Ini pola umum framework modern: kenyamanan untuk programmer, efisiensi untuk server. Dua-duanya dapat.

Kuis Cepat

Kuis cepat: Di Laravel, padanan php spark serve (CodeIgniter) dan app/Config/Routes.php (CodeIgniter) adalah?

Latihan: Kenalan Lebih Dekat

  1. Install Laravel 12 ke folder kantin-laravel dan jalankan dengan php artisan serve. Buka http://127.0.0.1:8000.
  2. Jalankan php artisan list dan baca daftar perintahnya. Catat 5 yang menurutmu paling berguna.
  3. Buat controller MenuController dengan artisan, lalu intip file yang dihasilkan di app/Http/Controllers.
  4. Ubah: tambahkan method index() yang mengembalikan view Blade sederhana berisi daftar menu khayalanmu.
  5. Eksperimen: di view Blade-mu, coba tampilkan string <b>tebal</b> dengan {{ }} lalu dengan {!! !!}. Amati bedanya di browser dan tulis kesimpulanmu.
  6. Tantangan: buat file .env-mu (salin dari .env.example) dan jalankan php artisan key:generate. Cari tahu apa fungsi APP_KEY itu.

Di episode #74, Routing, Controller, dan Blade Template, kita masuk ke inti Laravel: mendaftarkan route di routes/web.php, menghubungkannya ke controller, dan membangun halaman dengan layout Blade. Semua yang kamu pelajari di seri CodeIgniter akan terasa seperti deja vu yang menyenangkan.