Lampiran A — Pemecahan Masalah (Troubleshooting)
Cara membaca halaman galat Laravel: baca pesan paling atas (judul merah). Ia menyebut jenis galat dan alasannya. Di bawahnya ada berkas dan nomor baris tempat terjadinya. Di terminal, baca keluaran dari atas ke bawah, lalu cari baris yang diawali Error atau Exception.
A.1 Lingkungan dan instalasi
| Gejala | Penyebab | Solusi |
|---|---|---|
php tidak dikenali |
PHP belum ada di PATH | Pakai terminal dari Laragon, atau tambahkan folder PHP ke PATH |
composer tidak dikenali |
Composer belum terpasang | Pasang dari getcomposer.org, atau pakai terminal Laragon |
composer create-project gagal / timeout |
Jaringan lab membatasi atau lambat | Coba ulang; minta pengajar menyediakan salinan proyek kosong |
could not find driver |
Ekstensi SQLite tidak aktif | Buka php.ini, aktifkan extension=pdo_sqlite dan extension=sqlite3, lalu buka ulang terminal |
Your PHP version does not satisfy |
PHP terlalu lama untuk versi Laravel | Perbarui PHP (di Laragon: pilih versi PHP yang lebih baru) |
php artisan menampilkan No application encryption key |
.env belum punya APP_KEY |
Jalankan php artisan key:generate |
A.2 Laravel dan konfigurasi
| Gejala | Penyebab | Solusi |
|---|---|---|
Address already in use |
Port 8000 dipakai proses lain | php artisan serve --port=8001, atau tutup server lama |
| Perubahan kode tidak terlihat | Berkas belum disimpan atau browser menyimpan versi lama | Simpan (Ctrl+S), muat ulang dengan Ctrl+F5 |
Perubahan .env tidak terbaca |
Server dimulai sebelum .env diubah |
Hentikan (Ctrl+C), jalankan php artisan serve lagi |
Target class [...] does not exist |
Nama kelas salah ketik, atau use belum ditulis |
Cocokkan nama kelas dengan nama berkas; tambahkan use ...; di atas |
Route [siswa.index] not defined |
Route::resource belum terdaftar atau salah nama |
Periksa routes/web.php; jalankan php artisan route:list |
View [siswa.index] not found |
Berkas tampilan tidak ada di resources/views/siswa/ |
Salin ulang Paket Starter; periksa nama folder dan berkas |
Undefined variable $siswas (di berkas .blade.php) |
Nama yang dikirim ke tampilan beda dengan yang dipakai di tampilan | Samakan nama di controller dan tampilan |
compact(): Undefined variable $... (di controller) |
Nama di compact('...') tidak cocok dengan variabel di controller |
Cocokkan dengan nama variabel di atasnya, mis. $siswas = ... → compact('siswas') |
| Halaman putih tanpa isi | Method controller kosong (mis. show()) atau tidak ada return |
Pastikan method mengembalikan view(...) atau redirect(...) |
| Halaman galat tidak muncul, hanya Server Error | APP_DEBUG=false di .env |
Ubah ke APP_DEBUG=true (hanya saat belajar) |
A.3 Database
| Gejala | Penyebab | Solusi |
|---|---|---|
no such table: siswas |
Migration belum dijalankan | php artisan migrate |
no such column: ... |
Migration diubah tetapi tabel lama masih ada | php artisan migrate:fresh lalu seed ulang (data hilang) |
Table 'siswas' already exists |
Migration berjalan dua kali dengan cara berbeda | php artisan migrate:fresh |
MassAssignmentException |
$fillable belum diisi atau salah ketik |
Isi $fillable dengan nama kolom yang benar |
SQLSTATE[HY000]: unable to open database file |
Berkas database/database.sqlite tidak ada |
Buat berkas kosong dengan nama itu di folder database, lalu php artisan migrate |
| Data hilang setelah perintah tertentu | migrate:fresh menghapus semua tabel |
Itu memang tugasnya. Isi lagi dengan php artisan db:seed --class=SiswaSeeder |
| Jumlah siswa bertambah tiap seeder dijalankan | Memakai create() bukan firstOrCreate() |
Ganti ke firstOrCreate() (Bab 3) |
A.4 Formulir, CSRF, dan validasi
| Gejala | Penyebab | Solusi |
|---|---|---|
419 Page Expired |
@csrf hilang dari formulir |
Tambahkan @csrf tepat di bawah tag <form> |
405 Method Not Allowed |
@method('PUT') atau @method('DELETE') hilang |
Tambahkan @method yang sesuai di formulir |
| Formulir tidak menyimpan, tanpa pesan apa pun | Validasi gagal, tetapi tampilan belum memuat $errors |
Tempel blok @if ($errors->any()) (Bab 9) |
| Isian hilang setelah validasi gagal | Tampilan tidak memakai old('nama') |
Pakai value="{{ old('nama') }}" |
| Siswa kembar setelah mengubah data | update() memakai create() atau action mengarah ke siswa.store |
Pakai $siswa->update($data) dan route('siswa.update', $siswa->id) |
| Data tidak masuk padahal validasi lolos | Nama kolom di validate() tidak cocok dengan atribut name= di formulir |
Samakan: nama, program_les, no_hp |
| Nomor HP kehilangan angka 0 di depan | Kolom bertipe angka | Pakai $table->string('no_hp') (Bab 9) |
A.5 Test
| Gejala | Penyebab | Solusi |
|---|---|---|
No tests found pada --filter=... |
Nama test salah ketik, atau berkas belum disalin | Nama harus persis seperti nama kelas (mis. ModelSiswaTest); pastikan berkas ada di tests/Feature/ |
| Test gagal di bab awal padahal kode benar | Test bab lain ikut berjalan | Jalankan hanya yang diminta bab: --filter=NamaTest |
Class "App\Models\Siswa" not found di test |
Model belum dibuat | Selesaikan Bab 2 |
| Test memakai data praktikmu dan menghapusnya | phpunit.xml belum memakai :memory: |
Aktifkan dua baris DB_CONNECTION=sqlite dan DB_DATABASE=:memory: (Bab 1.6) |
ExampleTest merah setelah Bab 4 |
Alamat / sekarang dialihkan |
Hapus tests/Feature/ExampleTest.php (Bab 1.5) |
| Hasil akhir 36 test, bukan 35 | tests/Unit/ExampleTest.php bawaan Laravel masih ada |
Hapus berkas itu (Bab 1.5) |
test_rute_show_ada_tetapi_halamannya_kosong: kode 500, bukan 200 |
Method show() terhapus dari SiswaController, padahal rutenya tetap ada |
Kembalikan method kosong public function show(Siswa $siswa) { // } (Bab 4.4) |
| Banyak test merah sekaligus | Satu kesalahan dasar menjatuhkan banyak test | Perbaiki kegagalan pertama (paling atas), jalankan ulang |
Failed asserting that '...' contains "The nama field is required." |
Blok $errors belum ditempel, atau bahasa aplikasi bukan Inggris |
Tempel blok di create dan edit; pastikan APP_LOCALE=en |
assertSee gagal pada teks yang jelas ada |
Karakter khusus di-escape oleh Blade | Periksa ejaan persis; teks di test harus sama dengan di tampilan |
A.6 Kebiasaan debugging yang baik
- Reproduksi: temukan langkah pasti yang memunculkan masalah.
- Baca pesan galat sampai habis. Jangan hanya melihat warnanya.
- Persempit: tambahkan
dd($variabel);(berhenti dan tampilkan isi) di tengah kode untuk melihat nilainya. - Satu perubahan sekali, lalu uji ulang.
- Jelaskan masalahmu ke teman (rubber duck): sering jawabannya muncul sendiri.
- Jika tetap buntu, kumpulkan: pesan galat lengkap, berkas yang diubah, dan yang sudah dicoba, lalu tanyakan ke pengajar.