Laravel memanfaatkan fitur modern PHP, Composer sebagai pengelola package, dan PDO sebagai lapisan akses database, sehingga ketiganya perlu dikuasai sebelum masuk ke framework. Topik ini merangkum pengetahuan berorientasi objek yang dibutuhkan, fitur PHP 8 yang paling sering muncul, dan cara memeriksa lingkungan secara langsung di terminal. Berkas uji dan daftar periksa yang menyertainya dapat dijalankan sendiri, sehingga kekurangan yang perlu dipelajari ulang teridentifikasi sejak sekarang dan bukan di tengah proyek.
Pengetahuan berorientasi objek yang dibutuhkan#
Hampir seluruh bagian Laravel ditulis dengan gaya berorientasi objek, sehingga pemahaman pemrograman berorientasi objek (object-oriented programming) menjadi prasyarat yang paling menentukan. Controller, model, dan middleware masing-masing berupa kelas. Kontrak layanan dinyatakan sebagai interface, sedangkan banyak perilaku dimuat melalui trait. Membaca kode Laravel menjadi lebih mudah karena setiap barisnya mengandalkan konsep-konsep tersebut. Kekurangan pemahaman biasanya baru terasa ketika error sulit dilacak.
Tabel berikut memetakan konsep PHP ke wujud nyatanya pada Laravel. Pemetaan ini sekaligus dapat digunakan sebagai daftar periksa, yaitu setiap baris yang belum dipahami dengan mantap menandakan materi yang perlu dipelajari ulang:
| Konsep PHP | Wujudnya pada Laravel |
|---|---|
| kelas dan objek | controller, model, dan middleware masing-masing berupa kelas |
| pewarisan | controller aplikasi menurunkan kelas dasar Controller |
| interface | kontrak layanan pada namespace Illuminate\Contracts |
| trait | sifat HasFactory dan Notifiable yang digunakan model bawaan |
| namespace dan autoloading | App\Models\Note dimuat dari app/Models/Note.php |
| exception | error aplikasi dilaporkan sebagai exception yang dapat ditangkap |
| visibilitas | properti $fillable pada model menandai kolom yang boleh diisi massal |
Satu konsep yang sering terlewat adalah exception, yaitu mekanisme PHP untuk melaporkan dan menangkap kesalahan saat program berjalan. Laravel menggunakan exception untuk hampir semua kegagalan, mulai dari kueri yang gagal sampai halaman yang tidak ditemukan. Kebiasaan membaca jejak exception (stack trace) mempercepat pencarian penyebab error. Konsep ini layak dikuasai bersama sisanya karena akan digunakan berulang-ulang sepanjang jalur.
Fitur PHP 8 yang digunakan Laravel#
PHP 8 memperkenalkan fitur sintaks yang digunakan Laravel secara luas, sehingga fitur-fitur tersebut perlu dikenal lebih dulu agar kode framework mudah dibaca. Deklarasi tipe (type declaration) memberi jaminan bentuk data pada parameter dan properti, constructor property promotion memadukan deklarasi properti dengan parameter konstruktor, sedangkan enum mendefinisikan himpunan nilai yang sah untuk satu jenis data. Fitur pendukung lainnya meliputi match sebagai percabangan yang menghasilkan nilai, named arguments untuk pemanggilan dengan nama parameter, dan properti readonly yang nilainya tidak dapat diubah setelah ditetapkan.
Berkas uji berikut memuat fitur-fitur utama tersebut dalam satu program yang dapat dijalankan. Simpan berkasnya, lalu jalankan dengan perintah php uji-php8.php:
<?php
declare(strict_types=1);
// Enum PHP 8.1: kategori catatan pada aplikasi contoh jalur ini.
enum Kategori: string
{
case Kerja = 'kerja';
case Belajar = 'belajar';
case Pribadi = 'pribadi';
}
// Deklarasi tipe, constructor property promotion, dan properti readonly.
final class Catatan
{
public function __construct(
public readonly string $judul,
public readonly string $isi,
public readonly Kategori $kategori,
) {
}
// Match expression menggantikan rangkaian if-elseif yang panjang.
public function labelKategori(): string
{
return match ($this->kategori) {
Kategori::Kerja => 'pekerjaan kantor',
Kategori::Belajar => 'materi belajar',
Kategori::Pribadi => 'agenda pribadi',
};
}
}
// Named arguments membuat pemanggilan konstruktornya terbaca sebagai data.
$catatan = new Catatan(
judul: 'Rencana belajar Laravel',
isi: 'Mengerjakan migration untuk tabel notes',
kategori: Kategori::Belajar,
);
echo $catatan->judul . PHP_EOL;
echo $catatan->labelKategori() . PHP_EOL;
echo $catatan->kategori->value . PHP_EOL;Rencana belajar Laravel
materi belajar
belajarPada program itu, setiap fitur menjalankan perannya masing-masing. Enum Kategori menjamin kategori hanya bernilai salah satu dari tiga kemungkinan, sedangkan konstruktor menggunakan constructor property promotion sekaligus properti readonly agar isi catatan tidak berubah tanpa sengaja. Pernyataan match memetakan kategori menjadi label teks, dan pemanggilan konstruktor menggunakan named arguments sehingga maksud setiap argumen terbaca. Apabila perintah tersebut justru menampilkan pesan error sintaks, versi PHP yang terpasang kemungkinan lebih tua dari 8.1 sehingga perlu diperbarui terlebih dahulu.
Memeriksa versi dan ekstensi PHP#
Ekstensi PHP yang dibutuhkan Laravel dideklarasikan pada berkas composer.json milik laravel/framework, yaitu ctype, filter, hash, mbstring, openssl, session, dan tokenizer, ditambah PHP 8.3 ke atas. Ekstensi PDO beserta driver database-nya juga diperlukan karena seluruh akses database berjalan di atasnya. Pemeriksaan berikut menyaring daftar ekstensi terpasang untuk mencocokkan kebutuhan tersebut:
# menyaring ekstensi PHP yang dibutuhkan Laravel
php -m | grep -iE 'ctype|filter|hash|mbstring|openssl|session|tokenizer|pdo'ctype
filter
hash
mbstring
openssl
PDO
pdo_sqlite
session
tokenizerSetiap baris keluaran adalah nama ekstensi yang terpasang pada PHP di sandbox. Seluruh ekstensi inti Laravel terlihat lengkap, sedangkan driver PDO yang muncul hanya pdo_sqlite untuk SQLite. Apabila salah satu nama tidak muncul pada lingkungan sendiri, ekstensi yang bersangkutan belum terpasang dan perlu ditambahkan pada konfigurasi php.ini sebelum Laravel dijalankan. Apabila kelak berpindah ke MySQL atau PostgreSQL, driver pdo_mysql atau pdo_pgsql perlu dipasang dengan cara yang sama.
Composer sebagai pengelola package#
Composer adalah pengelola package untuk PHP, yaitu alat yang mengunduh, memasang, dan menautkan pustaka pihak ketiga beserta seluruh dependensinya. Proyek menyatakan kebutuhannya pada berkas composer.json, sedangkan versi terkunci disimpan pada composer.lock agar setiap mesin memasang versi yang persis sama. Autoloading, yaitu pemuatan kelas otomatis mengikuti peta PSR-4 yang disusun Composer, sering terlewat padahal mekanisme ini membuat kelas tidak perlu dimuat dengan require satu per satu.
Bentuk composer.json paling sederhana memuat nama proyek, daftar dependensi, dan peta autoload:
{
"name": "belajar/halo-composer",
"description": "Contoh composer.json minimal untuk mempelajari autoloading PSR-4.",
"require": {
"php": ">=8.3"
},
"autoload": {
"psr-4": {
"Belajar\\": "src/"
}
}
}Peta psr-4 di atas memetakan namespace Belajar\ ke direktori src/, sehingga kelas Belajar\Kalkulator dimuat otomatis dari src/Kalkulator.php setelah pemuat disusun ulang dengan composer dump-autoload. Laravel menggunakan pola yang sama dalam skala besar, yaitu proyek baru hanya menuntut php ^8.3, laravel/framework, dan laravel/tinker, sedangkan ratusan package lainnya diambil mengikuti rantai dependensinya. Kebiasaan membaca composer.json dan composer.lock berguna saat menelusuri asal versi pustaka yang digunakan proyek.
PDO sebagai pintu akses database#
PDO (PHP Data Objects) adalah lapisan akses database bawaan PHP yang menyediakan antarmuka seragam untuk banyak DBMS (database management system) melalui driver, misalnya pdo_sqlite, pdo_mysql, dan pdo_pgsql. Kode yang ditulis dengan PDO tidak terikat pada satu DBMS karena perbedaan antar-DBMS ditangani oleh driver yang dipilih saat koneksi dibuka. Fitur terpentingnya adalah prepared statement, yakni pernyataan SQL yang parameternya dikirim terpisah sehingga nilai masukan tidak pernah dieksekusi sebagai bagian SQL. Mekanisme itu menjadi pertahanan standar terhadap serangan injeksi SQL (SQL injection).
Query builder dan Eloquent pada Laravel menyusun pernyataan SQL lalu mengeksekusinya melalui PDO di bawahnya, sehingga pesan error database yang muncul di Laravel sering kali memuat istilah PDO. Berkas config/database.php pada proyek Laravel memetakan pilihan driver tersebut ke konfigurasi PDO, sehingga pengaturan yang sama pula yang ditelusuri saat masalah koneksi muncul. Penguasaan yang layak dicapai sebelum masuk ke Laravel adalah membuka koneksi, menjalankan prepared statement, dan membaca hasilnya pada satu DBMS apa pun. Setelah itu, pengetahuan PDO yang sama digunakan ulang saat Laravel memperkenalkan lapisan abstraksinya sendiri.
Kesalahan umum#
- Versi PHP di bawah 8.3 tetap digunakan. Gejalanya berupa error versi dari Composer ketika dependensi Laravel diinstal, karena
laravel/frameworkmenuntutphp ^8.3. Perbaikannya adalah memperbarui PHP, lalu mengulangi pemeriksaanphp -vsebelum melanjutkan. Kesalahan ini sering muncul pada mesin yang memasang beberapa versi PHP sekaligus, sehingga pastikan binerphpyang dipanggil Composer adalah biner yang sudah diperbarui. - Versi CLI dan versi server web dianggap sama. Pemeriksaan
php -vhanya mencerminkan PHP CLI, sedangkan aplikasi yang sudah di-deploy berjalan di atas PHP server web yang dapat berbeda versi maupun ekstensinya. Periksa keduanya secara terpisah, misalnya denganphp -vuntuk CLI dan halamanphpinfo()untuk server web. - Composer dianggap sekadar alat unduh. Peran autoloading dan
composer.locksering luput, sehingga kelas tidak termuat atau versi pustaka berbeda antarmesin. Gunakancomposer dump-autoloadsetelah menambah kelas baru di luar peta lama, dan jangan menyunting isivendor/karena direktori itu dihasilkan ulang oleh Composer.
Ringkasan#
- Prasyarat penguasaan mencakup pemrograman berorientasi objek (kelas, pewarisan, interface, trait, namespace, exception), fitur PHP 8, Composer, dan PDO.
- Perintah
php uji-php8.phpmenguji fitur PHP 8 pada lingkungan sendiri, dan keluaran tiga baris tanpa error menandakan versinya memenuhi syarat. - Ekstensi wajib framework adalah ctype, filter, hash, mbstring, openssl, session, dan tokenizer, ditambah PDO beserta driver database yang diperiksa melalui
php -m. composer.jsonmenyatakan dependensi dan peta autoloading PSR-4, sedangkan PDO menjadi lapisan yang digunakan query builder dan Eloquent untuk mengakses database.
Referensi#
- Classes and Objects — PHP — dokumentasi resmi pemrograman berorientasi objek pada PHP.
- Enumerations — PHP — fitur enum PHP 8.1 yang dipakai pada berkas uji topik ini.
- PDO — PHP — dokumentasi PDO beserta daftar driver database yang didukung.
- Composer Documentation — Composer — pengantar resmi Composer sebagai pengelola package PHP.
- composer.json laravel/framework — GitHub — sumber daftar ekstensi PHP yang dituntut kode sumber framework.