Lompat ke isi
Les Laravel DocsTutorial Les Privat · Laravel CRUD
Unduh Starter Pack
Lampiran

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

  1. Reproduksi: temukan langkah pasti yang memunculkan masalah.
  2. Baca pesan galat sampai habis. Jangan hanya melihat warnanya.
  3. Persempit: tambahkan dd($variabel); (berhenti dan tampilkan isi) di tengah kode untuk melihat nilainya.
  4. Satu perubahan sekali, lalu uji ulang.
  5. Jelaskan masalahmu ke teman (rubber duck): sering jawabannya muncul sendiri.
  6. Jika tetap buntu, kumpulkan: pesan galat lengkap, berkas yang diubah, dan yang sudah dicoba, lalu tanyakan ke pengajar.

Tutorial Data Siswa Les — Laravel CRUD untuk les privat.

Kode boleh disalin, tapi coba ketik sendiri dulu: tangan yang mengetik lebih cepat paham.