Dokumentasi Pengalaman Error pada Laravel #1

Setiap belajar pemrograman, pengalaman bersama error pasti terjadi. Saya pernah membaca ebook Hadiah Untuk Programmer dari Hilman Ramadhan yang menurut saya terdapat bagian menarik untuk dicatat dalam proses belajar.

Damian Conway pernah mengatakan “dokumentasi adalah surat cinta kamu untuk masa depan”. Yang saya maksud disini bukanlah dokumentasi dari orang lain, tetapi dokumentasi yang kamu lakukan selama proses belajar.

Paragraf di atas saya kutip dari ebook tersebut halaman dua puluh dua. Saya sangat setuju dengan pendapat di atas. Mendokumentasikan hasil belajar sangat membantu proses pembelajaran. Menyerap materi belajar akan lebih cepat bila melibatkan banyak anggota tubuh. Mata untuk membaca, tangan untuk menulis dan telinga untuk mendengar.

Tulisan ini saya buat untuk tujuan mendokumentasikan error yang pernah saya alami selama proses belajar. Saya sengaja membuat judul tulisan ini menjadi beberapa bagian karena masih banyak error yang belum saya temukan. Rencananya saya akan tetap menulis sebagai lanjutan dari tulisan ini bersamaan dengan error atau kesalahan baru yang saya dapat. Untuk bagian pertama ini, saya baru ingat beberapa error saja. Sebenarnya ada banyak, tapi hanya sebagian yang sedang terpikirkan, hehe.

No Application Encryption Key has been Specified

Error ini terjadi karena variabel APP_KEY pada file .env belum diatur. Solusinya adalah dengan menjalankan perintah php artisan key:generate. Bila file .env belum ada, salin .env.example lalu jalankan perintah yang sama.

MethodNotAllowedHttpException

Terjadi karena salah pengaksesan method pada routing. Misalnya endpoint dengan method POST diakses menggunakan method GET. Solusinya cek file routing dan pastikan endpoint beserta methodnya benar sesuai yang diinginkan.

Trying to get Property of Non-object

Disebabkan karena tidak ada resource dalam database yang sesuai dengan kondisi yang diminta. Ada banyak faktor penyebab. Dari pengalaman pribadi salah satu faktor yang sangat halus adalah kurang teliti menempatkan urutan routing. Bila dalam database data dipastikan ada dan query model benar, tidak ada salahnya menyempatkan untuk melihat ke dalam file routing dan mengecek urutannya. Laravel membaca routing berurut dari atas ke bawah. Kesalahan yang pernah saya lakukan adalah menempatkan endpoint /user/{username} sebelum /user/create. Yep, tentu saat mengakses /user/create Laravel akan membacanya sebagai /user/{username} dan melakukan pengecekan sesuai yang dilakukan pada controller. Karena create akan dianggap sebagai nilai dari parameter username.

contoh urutan routing yang kurang tepat
bagian controller

Specified Key was too long Error

Saya pertama kali mengalami error ini saat menggunakan versi Laravel 5.4 pada Windows. Dari yang pernah saya baca, error ini hanya masalah pada versi MySQL saja. Solusinya buka app/Providers/AppServiceProvider.php, pada method boot tambahkan kode seperti berikut:

use Illuminate\Support\Facades\Schema;
public function boot() {
Schema::defaultStringLength(191);
}

Referensi lengkap dapat dibaca pada Laravel News.

SQLSTATE[HY000]: General Error: 1364 Field ‘bla..bla..’ doesn’t have a Default Value

Pesan kesalahan yang ditampilkan cukup jelas. Suatu kolom tidak mempunyai nilai default. Sehingga saat mencoba menyimpan data ke dalam database akan terjadi error karena tidak menginzinkan kolom tertentu kosong. Kasus lain yang pernah saya alami saat menyimpan data menggunakan mass assignment dari Eloquent adalah lupa mendaftarkan nama kolom ke dalam array fillable pada modelnya. Solusinya bila menggunakan mass assignment, pastikan nama kolom sudah didaftarkan dalam array fillable. Bila tidak, silakan periksa pada proses controller dan struktur kolom databasenya.

proses menyimpan data menggunakan mass assignment
kolom username belum didaftarkan dalam array fillable
pesan error yang ditampilkan

Perubahan Tidak Berpengaruh pada Tinker

Saya biasa menggunakan artisan tinker untuk menguji relasi model bekerja dengan baik atau tidak. Saat menguji relasi melalui tinker dan mendapat kesalahan, saya melakukan pengecekan dan perubahan pada model yang sedang dikerjakan. Setelah itu saya uji kembali menggunakan tinker, biasanya tinker tidak membaca ulang apa yang telah saya rubah pada model. Solusinya keluar dari tinker (ctrl + c) lalu jalankan kembali perintah php artisan tinker, maka tinker akan membaca perubahan yang telah ditulis.


Tulisan ini akan saya lanjutkan pada bagian berikutnya dengan kesalahan atau error yang berbeda. Mendapat satu error sama dengan mendapat satu ilmu baru. Semangat belajar!


Artikel ini di tulis oleh Biobii, ia sering menulis artikel menarik mengenai Software Engineering dan Programming. Ikuti profilnya untuk mendapatkan update-an terbaru artikel-artikel miliknya.

Jika kamu merasa artikel ini menarik dan bermanfaat, bagikan ke lingkaran pertemanan kamu, agar mereka dapat membaca artikel ini.