
Laravel adalah salah satu framework PHP paling populer karena memiliki struktur rapi, dokumentasi lengkap, ekosistem besar, dan fitur modern seperti routing, middleware, ORM Eloquent, queue, scheduler, cache, event, notification, hingga API authentication. Namun, dalam proses development maupun deployment, developer sering bertemu berbagai error yang cukup membingungkan.
Sebagian error Laravel terlihat sederhana, misalnya halaman tidak ditemukan atau token CSRF tidak valid. Namun, sebagian lainnya bisa membuat aplikasi gagal berjalan total, seperti masalah
APP_KEY
, konfigurasi
.env
, permission folder
storage
, cache konfigurasi, autoload Composer, koneksi database, queue worker, Redis, hingga error saat deploy ke VPS atau shared hosting.
Artikel ini membahas 50 error Laravel yang paling sering terjadi, lengkap dengan penyebab, solusi, dan cara mencegahnya. Pembahasan dibuat praktis agar bisa langsung digunakan sebagai panduan troubleshooting ketika aplikasi Laravel bermasalah.
1. 500 Internal Server Error
500 Internal Server Error adalah error umum yang menandakan server gagal memproses request. Di Laravel, error ini bisa disebabkan oleh banyak hal.
Penyebab
Beberapa penyebab umum:
File
.env
salah konfigurasi.
APP_KEY
belum dibuat.
Permission folder
storage
atau
bootstrap/cache
bermasalah.
Error pada kode PHP.
Dependency Composer belum lengkap.
Cache config masih menyimpan konfigurasi lama.
Server tidak memenuhi versi PHP atau ekstensi yang dibutuhkan.
Solusi
Aktifkan debug sementara di file
.env
:
APP_DEBUG=true
APP_ENV=local
Kemudian cek log Laravel:
tail -f storage/logs/laravel.log
Jalankan beberapa perintah berikut:
composer install
php artisan key:generate
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
Pastikan permission folder benar:
chmod -R 775 storage bootstrap/cache
Cara Mencegah
Jangan deploy tanpa mengecek log.
Gunakan
.env
production yang benar.
Jalankan
composer install –no-dev –optimize-autoloader
saat deployment.
Pastikan permission folder sudah disiapkan.
Jangan mengaktifkan
APP_DEBUG=true
di production.
2. 404 Not Found
Error 404 Not Found muncul ketika route, controller, atau halaman yang diminta tidak ditemukan.
Penyebab
Route belum dibuat.
URL salah.
Route cache masih menyimpan route lama.
File
.htaccess
bermasalah.
Web server tidak diarahkan ke folder
public
.
Parameter route tidak sesuai.
Solusi
Cek daftar route:
php artisan route:list
Bersihkan cache route:
php artisan route:clear
Pastikan document root server mengarah ke folder:
/public
Jika memakai Apache, pastikan
mod_rewrite
aktif dan file
.htaccess
tersedia di folder
public
.
Cara Mencegah
Selalu cek
php artisan route:list
setelah menambah route.
Jangan mengarahkan domain ke root project Laravel.
Gunakan nama route agar URL lebih aman saat berubah.
3. 419 Page Expired
Error 419 Page Expired biasanya terjadi pada form Laravel yang menggunakan proteksi CSRF.
Penyebab
Token CSRF tidak dikirim.
Session expired.
Form tidak memakai directive
@csrf
.
Cookie/session tidak tersimpan.
Domain atau konfigurasi session salah.
Request AJAX tidak menyertakan token CSRF.
Solusi
Tambahkan
@csrf
pada form:
<form method=”POST” action=”/login”>
@csrf
</form>
Untuk AJAX, sertakan token:
<meta name=”csrf-token” content=” csrf_token() “>
axios.defaults.headers.common[‘X-CSRF-TOKEN’] =
document.querySelector(‘meta[name=”csrf-token”]’).getAttribute(‘content’);
Bersihkan cache:
php artisan config:clear
php artisan cache:clear
Cara Mencegah
Selalu gunakan
@csrf
pada form POST, PUT, PATCH, dan DELETE.
Pastikan session driver berjalan.
Jangan menghapus middleware
VerifyCsrfToken
tanpa alasan kuat.
4. CSRF Token Mismatch
Error CSRF token mismatch mirip dengan 419, tetapi biasanya muncul lebih eksplisit di log Laravel.
Penyebab
Token di form berbeda dengan token session.
Session tidak tersimpan.
Cache browser memakai halaman lama.
Domain cookie tidak sesuai.
Aplikasi berjalan di balik proxy tanpa konfigurasi benar.
Solusi
Pastikan form menggunakan:
@csrf
Cek konfigurasi session di
.env
:
SESSION_DRIVER=file
SESSION_DOMAIN=null
Jika memakai subdomain, sesuaikan:
SESSION_DOMAIN=.domainanda.com
Cara Mencegah
Hindari cache HTML form yang berisi token lama.
Atur session domain sesuai struktur domain.
Gunakan HTTPS secara konsisten.
5. APP_KEY Missing
Laravel membutuhkan
APP_KEY
untuk enkripsi session, cookie, password reset token, dan data terenkripsi lainnya.
Penyebab
File
.env
belum dibuat.
APP_KEY
kosong.
Belum menjalankan
php artisan key:generate
.
File
.env
tidak terbaca di server.
Solusi
Salin file contoh:
cp .env.example .env
Generate key:
php artisan key:generate
Pastikan hasilnya muncul:
APP_KEY=base64:xxxxxxxxxxxxxxxx
Cara Mencegah
Selalu generate
APP_KEY
setelah setup project.
Jangan mengganti
APP_KEY
sembarangan di production karena data terenkripsi lama bisa tidak terbaca.
Pastikan
.env
tidak ikut terhapus saat deployment.
6. Permission Storage Error
Laravel perlu menulis file ke folder
storage
dan
bootstrap/cache
.
Penyebab
Folder tidak writable.
Owner folder berbeda dengan user web server.
Permission terlalu ketat.
Deploy menggunakan user berbeda dari web server.
Solusi
Set permission:
chmod -R 775 storage bootstrap/cache
Jika memakai Linux server, sesuaikan owner:
chown -R www-data:www-data storage bootstrap/cache
Atau jika deploy memakai user tertentu:
chown -R deploy:www-data storage bootstrap/cache
Cara Mencegah
Atur permission setelah deployment.
Jangan gunakan
777
kecuali untuk debugging sementara.
Gunakan user deploy yang konsisten.
7. Route Cache Error
Laravel memiliki fitur route cache untuk mempercepat aplikasi. Namun, route cache bisa menyebabkan error jika route berubah.
Penyebab
Route lama masih tersimpan.
Menggunakan closure route saat menjalankan
route:cache
.
Controller dipindahkan tetapi cache belum dibersihkan.
Nama route duplikat.
Solusi
Bersihkan cache route:
php artisan route:clear
Buat ulang cache:
php artisan route:cache
Jika ada closure route seperti ini:
Route::get(‘/test’, function () {
return ‘Test’;
});
Pindahkan ke controller jika ingin memakai route cache di production.
Cara Mencegah
Gunakan controller untuk route production.
Jalankan
route:clear
setelah mengubah route.
Hindari nama route yang sama.
8. Config Cache Error
Error config cache sering terjadi setelah mengubah
.env
, tetapi aplikasi masih membaca konfigurasi lama.
Penyebab
config:cache
menyimpan konfigurasi lama.
.env
berubah tetapi cache belum dibersihkan.
Memanggil
env()
langsung di luar folder config.
File konfigurasi salah format.
Solusi
Jalankan:
php artisan config:clear
php artisan cache:clear
php artisan config:cache
Jangan gunakan
env()
langsung di controller. Gunakan file config:
config(‘app.name’)
Cara Mencegah
Gunakan
env()
hanya di file dalam folder
config
.
Setelah mengubah
.env
, bersihkan config cache.
Validasi file konfigurasi sebelum deploy.
9. Composer Autoload Error
Error autoload terjadi ketika Laravel tidak bisa menemukan class, package, atau file yang dibutuhkan.
Penyebab
Vendor belum terinstall.
Namespace salah.
Class dipindahkan tetapi autoload belum diperbarui.
Package Composer belum diinstall.
File
composer.lock
tidak sinkron.
Solusi
Jalankan:
composer install
composer dump-autoload
Jika dependency berubah:
composer update
Untuk production:
composer install –no-dev –optimize-autoloader
Cara Mencegah
Commit
composer.json
dan
composer.lock
.
Gunakan namespace sesuai PSR-4.
Jalankan
composer dump-autoload
setelah membuat class manual.
10. Queue Error
Queue digunakan untuk menjalankan pekerjaan berat di background, seperti mengirim email, memproses file, atau sinkronisasi data.
Penyebab
Queue worker tidak berjalan.
Driver queue salah.
Job gagal karena exception.
Tabel jobs belum dibuat.
Supervisor belum dikonfigurasi.
Redis/database queue tidak tersedia.
Solusi
Jika memakai database queue:
php artisan queue:table
php artisan migrate
Jalankan worker:
php artisan queue:work
Cek failed job:
php artisan queue:failed
Retry job gagal:
php artisan queue:retry all
Cara Mencegah
Gunakan Supervisor di production.
Catat exception dalam job.
Gunakan retry dan timeout yang realistis.
Monitor failed jobs secara rutin.
11. Scheduler Tidak Jalan
Laravel Scheduler digunakan untuk menjalankan task otomatis seperti cron job.
Penyebab
Cron server belum dikonfigurasi.
Perintah schedule tidak terdaftar.
Timezone salah.
Task error saat dijalankan.
Queue worker tidak aktif jika scheduler memanggil job queue.
Solusi
Tambahkan cron:
* * * * * cd /path/project && php artisan schedule:run >> /dev/null 2>&1
Cek daftar schedule:
php artisan schedule:list
Jalankan manual:
php artisan schedule:run
Cara Mencegah
Pastikan cron aktif di server.
Gunakan log pada scheduled task.
Atur timezone di
config/app.php
.
Tes schedule secara manual setelah deployment.
12. Session Error
Session error dapat menyebabkan login gagal, CSRF mismatch, atau data flash message tidak muncul.
Penyebab
Session driver salah.
Folder session tidak writable.
Cookie domain salah.
Session lifetime terlalu pendek.
Redis/database session belum siap.
Solusi
Cek
.env
:
SESSION_DRIVER=file
SESSION_LIFETIME=120
Jika memakai database:
php artisan session:table
php artisan migrate
Bersihkan cache:
php artisan config:clear
Cara Mencegah
Gunakan session driver sesuai kebutuhan.
Pastikan storage writable.
Atur cookie domain dengan benar.
Gunakan Redis untuk aplikasi dengan traffic besar.
13. Database Connection Error
Error koneksi database adalah salah satu error Laravel paling umum.
Penyebab
Host database salah.
Username/password salah.
Database belum dibuat.
Port salah.
Service database mati.
Konfigurasi
.env
belum terbaca.
Solusi
Cek
.env
:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database
DB_USERNAME=root
DB_PASSWORD=
Tes koneksi:
php artisan migrate:status
Bersihkan config cache:
php artisan config:clear
Cara Mencegah
Gunakan kredensial database khusus aplikasi.
Jangan hardcode konfigurasi database.
Pastikan database server aktif.
Simpan konfigurasi production dengan aman.
14. Migration Failed
Migration gagal ketika Laravel tidak bisa membuat, mengubah, atau menghapus tabel database.
Penyebab
Struktur tabel sudah ada.
Nama kolom duplikat.
Foreign key gagal.
Tipe data tidak cocok.
Urutan migration salah.
Database user tidak punya permission.
Solusi
Cek status migration:
php artisan migrate:status
Rollback migration terakhir:
php artisan migrate:rollback
Jalankan ulang:
php artisan migrate
Untuk development, bisa memakai:
php artisan migrate:fresh
Namun, jangan gunakan
migrate:fresh
di production karena akan menghapus tabel.
Cara Mencegah
Review migration sebelum deploy.
Gunakan foreign key dengan urutan yang benar.
Backup database sebelum migration production.
Hindari mengubah migration lama yang sudah berjalan di production.
15. Sanctum Error
Laravel Sanctum sering digunakan untuk autentikasi SPA dan API token.
Penyebab
Middleware Sanctum belum dikonfigurasi.
Domain stateful salah.
CSRF cookie belum diminta.
Token tidak dikirim.
CORS salah konfigurasi.
Solusi
Pastikan konfigurasi
.env
:
SANCTUM_STATEFUL_DOMAINS=localhost:3000,domainanda.com
SESSION_DOMAIN=.domainanda.com
Untuk SPA, request dulu endpoint:
/sanctum/csrf-cookie
Kemudian login menggunakan request yang menyertakan cookie.
Cara Mencegah
Bedakan penggunaan Sanctum untuk SPA dan API token.
Atur CORS dengan benar.
Gunakan HTTPS di production.
Jangan lupa middleware
auth:sanctum
.
16. Passport Error
Laravel Passport digunakan untuk OAuth2 authentication.
Penyebab
Key Passport belum dibuat.
Client belum dibuat.
Migration belum dijalankan.
Token expired.
Konfigurasi guard salah.
Solusi
Jalankan:
php artisan passport:install
Jika key hilang:
php artisan passport:keys
Pastikan guard:
‘api’ => [
‘driver’ => ‘passport’,
‘provider’ => ‘users’,
],
Cara Mencegah
Simpan key Passport dengan aman.
Jalankan migration sebelum install Passport.
Gunakan Sanctum jika kebutuhan authentication lebih sederhana.
17. File Upload Error
Error upload file bisa terjadi karena validasi, permission, konfigurasi PHP, atau storage Laravel.
Penyebab
Ukuran file melebihi batas PHP.
Folder storage tidak writable.
Symbolic link storage belum dibuat.
Validasi mime type gagal.
Disk filesystem salah.
Solusi
Cek konfigurasi PHP:
upload_max_filesize=20M
post_max_size=20M
Buat storage link:
php artisan storage:link
Contoh upload:
$request->file(‘avatar’)->store(‘avatars’, ‘public’);
Cara Mencegah
Validasi ukuran dan tipe file.
Gunakan storage disk yang jelas.
Jangan menyimpan file user langsung di folder public tanpa validasi.
Pastikan permission storage benar.
18. Redis Error
Redis sering dipakai untuk cache, queue, session, dan broadcasting.
Penyebab
Redis server mati.
Host/port salah.
Extension PHP Redis belum tersedia.
Password Redis salah.
Konfigurasi client tidak cocok.
Solusi
Cek
.env
:
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
Tes Redis:
redis-cli ping
Jika berhasil, hasilnya:
PONG
Cara Mencegah
Monitor service Redis.
Gunakan password Redis di production.
Jangan expose Redis ke publik.
Pastikan queue worker membaca konfigurasi terbaru.
19. Cache Driver Error
Cache driver error terjadi ketika Laravel tidak bisa membaca atau menulis cache.
Penyebab
Driver cache tidak tersedia.
Redis/Memcached mati.
Folder cache tidak writable.
Config cache salah.
Package pendukung belum terinstall.
Solusi
Gunakan file cache untuk debugging:
CACHE_DRIVER=file
Bersihkan cache:
php artisan cache:clear
php artisan config:clear
Jika memakai Redis, pastikan Redis aktif.
Cara Mencegah
Pilih cache driver sesuai skala aplikasi.
Gunakan Redis untuk production dengan traffic tinggi.
Pastikan konfigurasi cache tidak berubah tanpa clear config.
20. View Not Found
Error ini muncul ketika Laravel tidak menemukan file Blade.
Penyebab
Nama view salah.
File Blade tidak ada.
Folder view salah struktur.
Cache view masih menyimpan referensi lama.
Solusi
Jika file berada di:
resources/views/pages/home.blade.php
Panggil dengan:
return view(‘pages.home’);
Bersihkan view cache:
php artisan view:clear
Cara Mencegah
Gunakan struktur folder view yang konsisten.
Hindari typo nama file.
Bersihkan cache view setelah deploy.
21. Class Not Found
Error Class not found terjadi ketika PHP tidak bisa menemukan class yang dipanggil.
Penyebab
Namespace salah.
File class belum dibuat.
Autoload Composer belum diperbarui.
Import
use
belum ditambahkan.
Nama class tidak sesuai nama file.
Solusi
Tambahkan import:
use App\Models\User;
Jalankan:
composer dump-autoload
Cara Mencegah
Ikuti standar PSR-4.
Gunakan IDE dengan auto-import.
Jangan memindahkan file tanpa memperbarui namespace.
22. Target Class Does Not Exist
Error ini sering muncul pada controller, middleware, listener, atau dependency injection.
Penyebab
Controller belum dibuat.
Nama controller salah di route.
Namespace tidak sesuai.
Binding service container belum dibuat.
Solusi
Contoh route benar:
use App\Http\Controllers\PostController;
Route::get(‘/posts’, [PostController::class, ‘index’]);
Bersihkan route cache:
php artisan route:clear
Cara Mencegah
Gunakan format route controller modern.
Hindari string controller lama jika tidak diperlukan.
Cek route list secara rutin.
23. Method Not Allowed
Error 405 Method Not Allowed muncul ketika URL ada, tetapi method HTTP salah.
Penyebab
Route hanya menerima POST, tetapi request memakai GET.
Form tidak menyertakan method spoofing.
AJAX memakai method salah.
Route resource tidak sesuai.
Solusi
Cek route:
php artisan route:list
Untuk PUT/PATCH/DELETE di form Blade:
@method(‘PUT’)
@csrf
Cara Mencegah
Sesuaikan method form dengan route.
Gunakan route name.
Pahami method pada resource controller.
24. Too Many Redirects
Error ini terjadi ketika aplikasi terus melakukan redirect tanpa berhenti.
Penyebab
Middleware auth salah konfigurasi.
Redirect login berulang.
HTTPS redirect loop.
Proxy/load balancer belum dikonfigurasi.
Route guest dan auth bertabrakan.
Solusi
Cek middleware pada route. Jika memakai reverse proxy, konfigurasi trusted proxy dengan benar.
Pastikan
APP_URL
sesuai:
APP_URL=https://domainanda.com
Cara Mencegah
Pisahkan route guest dan auth.
Tes redirect setelah deploy.
Gunakan konfigurasi HTTPS yang konsisten.
25. Mixed Content Error
Mixed content terjadi ketika halaman HTTPS memuat asset HTTP.
Penyebab
APP_URL
masih HTTP.
Asset menggunakan URL hardcoded.
CDN tidak memakai HTTPS.
Proxy SSL tidak terdeteksi Laravel.
Solusi
Ubah:
APP_URL=https://domainanda.com
Gunakan helper:
asset(‘css/app.css’)
Jangan hardcode:
http://domainanda.com/style.css
Cara Mencegah
Gunakan HTTPS untuk semua asset.
Pastikan CDN mendukung SSL.
Hindari hardcoded URL.
26. Asset Not Loading
CSS, JavaScript, atau gambar tidak tampil setelah deploy.
Penyebab
Build frontend belum dijalankan.
Path asset salah.
Symbolic link belum dibuat.
File tidak ada di server.
Permission file bermasalah.
Solusi
Untuk Vite:
npm install
npm run build
Pastikan Blade menggunakan:
@vite([‘resources/css/app.css’, ‘resources/js/app.js’])
Untuk file storage:
php artisan storage:link
Cara Mencegah
Jalankan build saat deployment.
Commit konfigurasi Vite dengan benar.
Jangan menghapus folder public build.
27. Vite Manifest Not Found
Error ini umum terjadi pada Laravel modern yang memakai Vite.
Penyebab
npm run build
belum dijalankan.
Folder
public/build
tidak ada.
Deployment tidak mengunggah hasil build.
Mode development/production tertukar.
Solusi
Jalankan:
npm install
npm run build
Pastikan folder ini ada:
public/build/manifest.json
Cara Mencegah
Masukkan proses build ke pipeline deployment.
Pastikan
public/build
ikut tersedia di server.
Jangan menjalankan production tanpa build asset.
28. NPM Build Failed
Error build frontend bisa terjadi pada project Laravel yang memakai Vite, Tailwind, Vue, React, atau package frontend lainnya.
Penyebab
Versi Node tidak cocok.
Dependency belum diinstall.
Package lock konflik.
Environment variable frontend salah.
Syntax error di JavaScript/CSS.
Solusi
Cek versi Node:
node -v
npm -v
Install ulang:
rm -rf node_modules package-lock.json
npm install
npm run build
Cara Mencegah
Gunakan versi Node yang stabil.
Simpan
package-lock.json
.
Jalankan build lokal sebelum deploy.
29. Mail Not Sending
Email tidak terkirim dari aplikasi Laravel.
Penyebab
Konfigurasi SMTP salah.
Port diblokir server.
Username/password salah.
Mail driver salah.
Queue email tidak berjalan.
Solusi
Cek
.env
:
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=587
MAIL_USERNAME=xxxxx
MAIL_PASSWORD=xxxxx
MAIL_ENCRYPTION=tls
MAIL_FROM_NAME=”${APP_NAME}”
Jika email dikirim via queue, pastikan worker berjalan:
php artisan queue:work
Cara Mencegah
Gunakan provider email terpercaya.
Tes email di staging.
Simpan konfigurasi email dengan aman.
Monitor email gagal.
30. Validation Error Tidak Muncul
Kadang validasi gagal, tetapi pesan error tidak tampil di halaman.
Penyebab
Blade tidak menampilkan error.
Session tidak berjalan.
Redirect tidak membawa error.
Nama input tidak sesuai.
AJAX tidak menangani response error.
Solusi
Tampilkan error di Blade:
@error(‘email’)
<div> $message </div>
@enderror
Atau tampilkan semua:
@if ($errors->any())
<ul>
@foreach ($errors->all() as $error)
<li> $error </li>
@endforeach
</ul>
@endif
Cara Mencegah
Gunakan Form Request untuk validasi kompleks.
Pastikan session aktif.
Tangani error validasi pada frontend.
31. Mass Assignment Error
Error ini muncul saat menggunakan
create()
atau
update()
pada model Eloquent.
Penyebab
Field belum masuk
$fillable
.
Model menggunakan
$guarded
.
Input berisi field yang tidak boleh diisi massal.
Solusi
Tambahkan fillable:
protected $fillable = [
‘name’,
‘email’,
‘password’,
];
Atau gunakan assignment manual:
$user->name = $request->name;
$user->save();
Cara Mencegah
Jangan asal memakai
$guarded = []
untuk data sensitif.
Batasi field yang boleh diisi user.
Validasi request sebelum menyimpan data.
32. SQLSTATE Integrity Constraint Violation
Error ini biasanya berhubungan dengan unique key, foreign key, atau data yang tidak valid.
Penyebab
Email sudah terdaftar.
Foreign key mengarah ke data yang tidak ada.
Kolom wajib diisi tetapi nilainya null.
Data duplikat pada kolom unique.
Solusi
Validasi unique:
‘email’ => ‘required|email|unique:users,email’
Pastikan foreign key valid sebelum insert.
Cara Mencegah
Gunakan validasi sebelum query.
Tangani exception database.
Buat pesan error yang jelas untuk user.
33. N+1 Query Problem
Ini bukan error fatal, tetapi dapat membuat aplikasi sangat lambat.
Penyebab
Mengakses relasi dalam loop tanpa eager loading.
Query berulang untuk setiap item.
Struktur Eloquent tidak efisien.
Solusi
Gunakan eager loading:
$posts = Post::with(‘author’)->get();
Bukan:
$posts = Post::all();
foreach ($posts as $post) {
echo $post->author->name;
}
Cara Mencegah
Gunakan Laravel Debugbar saat development.
Review query sebelum production.
Terapkan eager loading pada halaman daftar.
34. Model Not Found
Error ini terjadi ketika data berdasarkan ID tidak ditemukan.
Penyebab
ID tidak ada di database.
Data sudah dihapus.
Route model binding gagal.
Query menggunakan scope yang membatasi data.
Solusi
Gunakan
findOrFail()
jika ingin otomatis 404:
$post = Post::findOrFail($id);
Atau tangani manual:
$post = Post::find($id);
if (!$post) {
abort(404);
}
Cara Mencegah
Validasi parameter route.
Gunakan halaman 404 yang informatif.
Jangan menampilkan error mentah ke user.
35. Token Expired
Token expired sering terjadi pada password reset, API token, atau email verification.
Penyebab
Token melewati waktu berlaku.
Token sudah digunakan.
Konfigurasi expiration terlalu pendek.
Waktu server tidak sinkron.
Solusi
Cek konfigurasi token sesuai fitur yang digunakan. Untuk password reset, cek
config/auth.php
.
Pastikan waktu server benar:
date
Cara Mencegah
Gunakan durasi token yang wajar.
Beri pesan jelas kepada user.
Sinkronkan waktu server dengan NTP.
36. CORS Error
CORS error umum pada API Laravel yang diakses frontend berbeda domain.
Penyebab
Domain frontend belum diizinkan.
Method atau header tidak diizinkan.
Credentials/cookie tidak dikonfigurasi.
Preflight request gagal.
Solusi
Cek konfigurasi CORS di
config/cors.php
.
Contoh:
‘allowed_origins’ => [‘https://frontendanda.com’],
‘allowed_methods’ => [‘*’],
‘allowed_headers’ => [‘*’],
‘supports_credentials’ => true,
Bersihkan cache config:
php artisan config:clear
Cara Mencegah
Jangan gunakan wildcard sembarangan untuk production.
Daftarkan domain frontend secara eksplisit.
Tes API dari browser, bukan hanya Postman.
37. API 401 Unauthorized
Error 401 berarti request belum terautentikasi.
Penyebab
Token tidak dikirim.
Token salah atau expired.
Guard salah.
Header Authorization tidak terbaca.
Middleware auth tidak sesuai.
Solusi
Kirim header:
Authorization: Bearer TOKEN_ANDA
Pastikan route memakai guard yang benar:
Route::middleware(‘auth:sanctum’)->get(‘/user’, function (Request $request) {
return $request->user();
});
Cara Mencegah
Dokumentasikan format authentication API.
Gunakan middleware sesuai jenis token.
Tangani token expired di frontend.
38. API 403 Forbidden
Error 403 berarti user sudah login, tetapi tidak punya izin.
Penyebab
Policy menolak akses.
Gate mengembalikan false.
Role/permission tidak sesuai.
User mencoba mengakses data orang lain.
Solusi
Cek policy:
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
Gunakan authorization:
$this->authorize(‘update’, $post);
Cara Mencegah
Buat policy untuk resource penting.
Jangan hanya menyembunyikan tombol di frontend.
Selalu validasi izin di backend.
39. API 422 Unprocessable Entity
Error 422 biasanya muncul ketika validasi request API gagal.
Penyebab
Field wajib tidak dikirim.
Format data salah.
Email tidak valid.
File tidak sesuai aturan.
JSON request tidak sesuai.
Solusi
Cek response JSON Laravel. Biasanya berisi:
{
“message”: “The given data was invalid.”,
“errors”: {
“email”: [“The email field is required.”]
}
}
Perbaiki request sesuai validasi.
Cara Mencegah
Buat dokumentasi API request.
Gunakan Form Request.
Tampilkan pesan validasi dengan baik di frontend.
40. API 429 Too Many Requests
Error 429 terjadi ketika request terlalu sering dan terkena rate limit.
Penyebab
User terlalu banyak request.
Bot menyerang endpoint.
Rate limiter terlalu rendah.
Frontend melakukan request berulang tanpa kontrol.
Solusi
Atur rate limit di Laravel:
RateLimiter::for(‘api’, function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
Cara Mencegah
Gunakan rate limit untuk endpoint login dan API publik.
Tambahkan debounce di frontend.
Monitor IP dengan request abnormal.
41. Pagination Error
Pagination error bisa muncul ketika query, parameter halaman, atau view pagination bermasalah.
Penyebab
Query terlalu berat.
Parameter page tidak valid.
View pagination belum dipublish.
Menggunakan
get()
padahal butuh
paginate()
.
Solusi
Gunakan:
$posts = Post::latest()->paginate(10);
Di Blade:
$posts->links()
Cara Mencegah
Gunakan pagination untuk data besar.
Validasi parameter filter.
Hindari mengambil semua data dengan
all()
untuk halaman daftar.
42. Storage Link Error
File berhasil diupload tetapi tidak bisa diakses melalui browser.
Penyebab
php artisan storage:link
belum dijalankan.
Symbolic link tidak didukung hosting.
File disimpan di disk private.
Path URL salah.
Solusi
Jalankan:
php artisan storage:link
Akses file public melalui:
Storage::url($path)
Cara Mencegah
Pastikan disk
public
dikonfigurasi benar.
Jalankan storage link setelah deployment.
Untuk hosting tanpa symlink, gunakan strategi upload yang sesuai.
43. Blade Syntax Error
Blade syntax error terjadi ketika template memiliki penulisan directive yang salah.
Penyebab
@if
tidak ditutup
@endif
.
Kurung kurawal tidak lengkap.
Variabel tidak tersedia.
Komentar HTML berisi syntax Blade bermasalah.
Solusi
Cek file Blade yang disebutkan di error. Bersihkan cache view:
php artisan view:clear
Contoh benar:
@if ($user)
$user->name
@endif
Cara Mencegah
Gunakan indentation rapi.
Hindari logic terlalu kompleks di Blade.
Pecah komponen besar menjadi partial/component.
44. Undefined Variable
Error ini muncul ketika view memakai variabel yang tidak dikirim dari controller.
Penyebab
Controller tidak mengirim data.
Nama variabel salah.
Kondisi tertentu tidak mendefinisikan variabel.
View partial mengharapkan data yang tidak tersedia.
Solusi
Kirim data:
return view(‘posts.index’, [
‘posts’ => $posts,
]);
Di Blade, gunakan fallback:
$title ?? ‘Tanpa Judul’
Cara Mencegah
Konsisten memberi nama variabel.
Gunakan view model atau DTO untuk halaman kompleks.
Hindari partial yang bergantung pada variabel tidak jelas.
45. Undefined Index atau Undefined Array Key
Error ini umum terjadi saat mengakses array tanpa mengecek key.
Penyebab
Key array tidak ada.
Request input tidak dikirim.
Response API eksternal berubah.
Data JSON tidak sesuai ekspektasi.
Solusi
Gunakan helper:
$value = $request->input(‘name’);
Atau null coalescing:
$name = $data[‘name’] ?? null;
Cara Mencegah
Validasi input.
Jangan percaya struktur data eksternal 100%.
Gunakan DTO atau resource class untuk data kompleks.
46. Allowed Memory Size Exhausted
Error ini terjadi ketika script PHP memakai memori melebihi batas.
Penyebab
Mengambil data terlalu banyak sekaligus.
Import file besar tanpa chunking.
Query tidak efisien.
Loop menyimpan data besar di memory.
Solusi
Gunakan chunk:
User::chunk(100, function ($users) {
foreach ($users as $user) {
// proses data
}
});
Untuk export besar, gunakan queue.
Cara Mencegah
Jangan memakai
Model::all()
untuk data besar.
Gunakan pagination, chunk, atau cursor.
Monitor memory saat menjalankan job.
47. Maximum Execution Time Exceeded
Error ini muncul ketika proses berjalan terlalu lama.
Penyebab
Query lambat.
Import/export besar.
Request menunggu API eksternal.
Proses berat dijalankan langsung di HTTP request.
Solusi
Pindahkan proses berat ke queue:
php artisan queue:work
Optimalkan query dan tambahkan index database jika perlu.
Cara Mencegah
Jangan menjalankan proses berat langsung saat user menunggu.
Gunakan queue untuk email, export, import, dan sinkronisasi.
Terapkan timeout dan retry untuk API eksternal.
48. Deployment Error
Deployment error terjadi ketika aplikasi berjalan baik di lokal, tetapi gagal di server.
Penyebab
Versi PHP berbeda.
Ekstensi PHP belum tersedia.
.env
production salah.
Composer dependency belum terinstall.
Permission folder salah.
Cache lama masih aktif.
Solusi
Checklist deployment:
composer install –no-dev –optimize-autoloader
php artisan migrate –force
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan cache:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
Jika memakai frontend:
npm install
npm run build
Cara Mencegah
Buat checklist deployment.
Gunakan staging environment.
Samakan versi PHP lokal dan server.
Backup database sebelum deploy besar.
49. Environment Variable Not Working
Kadang perubahan
.env
tidak berpengaruh di Laravel.
Penyebab
Config cache masih aktif.
Salah nama variable.
Ada spasi atau karakter khusus tanpa quote.
Menggunakan
env()
langsung di runtime.
File
.env
tidak terbaca.
Solusi
Bersihkan config:
php artisan config:clear
Jika value mengandung spasi, gunakan quote:
APP_NAME=”Aplikasi Laravel Saya”
Gunakan:
config(‘app.name’)
bukan:
env(‘APP_NAME’)
di controller.
Cara Mencegah
Setelah ubah
.env
, jalankan
config:clear
.
Gunakan file config sebagai perantara.
Jangan menyimpan
.env
di repository publik.
50. Log File Tidak Terbuat
Log sangat penting untuk debugging, tetapi kadang Laravel tidak bisa membuat log.
Penyebab
Folder
storage/logs
tidak writable.
Permission folder salah.
Disk penuh.
Konfigurasi logging salah.
User web server tidak punya akses.
Solusi
Cek folder:
ls -la storage/logs
Set permission:
chmod -R 775 storage
chown -R www-data:www-data storage
Cek konfigurasi
.env
:
LOG_CHANNEL=stack
LOG_LEVEL=debug
Cara Mencegah
Monitor kapasitas disk.
Rotasi log secara berkala.
Pastikan permission storage benar setelah deploy.
Jangan mematikan logging di production.
Checklist Cepat Troubleshooting Laravel
Jika aplikasi Laravel error dan belum tahu penyebabnya, gunakan checklist berikut:
Cek file log:
storage/logs/laravel.log
Aktifkan debug sementara di lokal atau staging:
APP_DEBUG=true
Bersihkan cache:
php artisan optimize:clear
Cek konfigurasi
.env
.
Pastikan
APP_KEY
tersedia:
php artisan key:generate
Cek permission:
chmod -R 775 storage bootstrap/cache
Cek route:
php artisan route:list
Cek koneksi database:
php artisan migrate:status
Install dependency:
composer install
Build asset frontend:
npm install
npm run build
Tips Mencegah Error Laravel di Production
Mencegah error jauh lebih baik daripada memperbaiki error setelah aplikasi digunakan user. Berikut beberapa praktik yang disarankan.
1. Gunakan Environment Terpisah
Pisahkan konfigurasi lokal, staging, dan production. Jangan menggunakan database production untuk testing sembarangan.
2. Jangan Menampilkan Error Mentah ke User
Di production, gunakan:
APP_DEBUG=false
APP_ENV=production
Error detail sebaiknya hanya dilihat developer melalui log.
3. Gunakan Version Control
Gunakan Git agar perubahan kode bisa dilacak dan dikembalikan jika deployment bermasalah.
4. Buat Checklist Deployment
Checklist sederhana dapat mencegah error klasik seperti lupa
composer install
, lupa
npm run build
, lupa
storage:link
, atau lupa
php artisan migrate
.
5. Monitor Log dan Server
Pantau log Laravel, log web server, CPU, RAM, disk, queue, dan database. Banyak error production sebenarnya bisa diketahui lebih awal dari monitoring.
6. Gunakan Queue untuk Proses Berat
Jangan memproses export besar, pengiriman email massal, resize gambar, atau sinkronisasi API langsung di request user.
7. Backup Sebelum Migration
Sebelum menjalankan migration di production, selalu backup database. Migration yang salah bisa menyebabkan kehilangan data.
8. Gunakan Validasi Input
Banyak error berasal dari input user yang tidak sesuai. Gunakan Form Request agar validasi lebih rapi dan mudah dikelola.
9. Hindari Hardcode Konfigurasi
Gunakan
.env
dan file
config
. Jangan menulis password database, API key, atau URL production langsung di kode.
10. Dokumentasikan Error yang Pernah Terjadi
Buat catatan internal setiap kali menemukan error baru. Catatan tersebut akan sangat membantu ketika error serupa muncul kembali.
Kesimpulan
Laravel menyediakan banyak fitur yang memudahkan pengembangan aplikasi web modern, tetapi setiap fitur juga memiliki potensi error jika konfigurasi, struktur kode, atau proses deployment tidak dilakukan dengan benar. Error seperti 500 Internal Server Error, 404 Not Found, 419 Page Expired, CSRF Token Mismatch, APP_KEY Missing, permission storage, route cache, config cache, Composer autoload, queue, scheduler, session, database connection, migration, Sanctum, Passport, file upload, Redis, dan cache driver adalah masalah yang sangat sering ditemui developer Laravel.
Kunci utama debugging Laravel adalah membaca log, memahami alur request, mengecek konfigurasi
.env
, membersihkan cache yang relevan, memastikan permission folder benar, dan menjalankan perintah Artisan sesuai kebutuhan. Untuk production, pencegahan menjadi lebih penting: gunakan deployment checklist, monitoring, backup database, queue worker yang stabil, konfigurasi server yang aman, dan proses testing sebelum rilis.
Dengan memahami 50 error Laravel di atas, developer dapat memperbaiki masalah lebih cepat, mengurangi downtime, dan membangun aplikasi Laravel yang lebih stabil, aman, serta mudah dirawat dalam jangka panjang.