Cara Mengatasi Class Not Found di Laravel
Error Class not found di Laravel berarti aplikasi mencoba memakai sebuah class yang tidak bisa ditemukan oleh autoloader PHP. Pesannya bisa berbentuk Class "App\\Models\\Post" not found, Interface not found, atau error serupa saat route, controller, service, atau model dipanggil.
Masalah ini biasanya bukan karena Laravel rusak, melainkan karena namespace, lokasi file, nama class, atau autoload Composer tidak sinkron. Jadi fokus debugging-nya harus ke struktur kode, bukan ke browser.
Jawaban Singkat
Kalau muncul Class not found, cek empat hal dulu:
- nama class,
- namespace,
- lokasi file,
usestatement atau autoload Composer.
Di Laravel, error ini paling sering beres hanya dengan menyamakan struktur file dan namespace.
Kapan Error Ini Biasanya Muncul?
- Setelah membuat model, service, atau class baru secara manual
- Setelah memindahkan file ke folder lain
- Setelah mengganti namespace, tetapi lupa mengganti
use - Saat case huruf besar-kecil nama file tidak konsisten
- Saat Composer autoload belum diperbarui
Penyebab Paling Umum
1. Namespace Tidak Cocok dengan Lokasi File
Contoh file berada di app/Services/ReportService.php, tetapi isinya:
Folder Services tidak cocok dengan namespace App\Service.
2. Nama Class dan File Tidak Selaras
File ProductService.php dengan class Productservice terlihat hampir sama, tetapi tetap memicu error di environment yang lebih ketat.
3. Lupa Import Class dengan use
Jika tidak ada use App\Models\Post;, Laravel akan mencari class Post di namespace controller saat ini.
4. Composer Autoload Belum Diperbarui
Kalau kamu menambah namespace manual atau memindahkan class, Composer kadang masih memakai peta lama sampai autoload diperbarui.
5. Salah Menyebut Namespace Internal Laravel
Contoh umum:
- model ada di
App\Models\User, bukanApp\User - request ada di
App\Http\Requests\StorePostRequest - middleware ada di
App\Http\Middleware
Langkah Diagnosis
- Salin nama class yang muncul di pesan error persis seperti aslinya.
- Cari deklarasi class tersebut di project.
- Cocokkan tiga hal:
- path file
namespace- nama class
- Pastikan file yang memakai class itu punya
useyang benar. - Jika struktur sudah benar, perbarui autoload Composer.
Untuk class App\Services\ReportService, file-nya harus berada di app/Services/ReportService.php, berisi namespace App\Services;, dan class bernama ReportService.
Langkah Fix
1. Perbaiki Namespace
2. Tambahkan use yang Tepat
3. Samakan Nama File dengan Nama Class
Gunakan:
ReportService.phpuntukclass ReportServiceStorePostRequest.phpuntukclass StorePostRequest
4. Perbarui Autoload Composer
Jika error masih terasa "menempel", bersihkan cache Laravel juga:
5. Gunakan Generator Artisan Jika Tersedia
Daripada membuat file manual, lebih aman memakai:
Artisan otomatis membuat path, namespace, dan nama class yang konsisten.
Contoh Sebelum dan Sesudah
Sebelum
Class ReportService akan dicari di namespace controller kalau tidak di-import.
Sesudah
Kesalahan yang Sering Terjadi
App\Models\User Tidak Ditemukan
Periksa apakah model benar-benar ada di app/Models/User.php dan namespace-nya App\Models.
Class Baru Aman di Local, Gagal di Server
Sering disebabkan oleh perbedaan huruf besar-kecil nama file. Server Linux lebih ketat daripada macOS.
Setelah Rename Folder, Error Tetap Muncul
Biasanya Composer autoload atau cache Laravel masih mengacu ke struktur lama.
Import Sudah Benar, Tapi File Masih Salah Letak
Kalau namespace cocok tapi file pindah ke folder lain tanpa mengikuti PSR-4, autoloader tetap gagal menemukan class.
Pencegahan
- Gunakan
php artisan make:*saat membuat class Laravel. - Ikuti aturan PSR-4: namespace, folder, dan nama file harus selaras.
- Pakai satu gaya penamaan yang konsisten untuk folder dan class.
- Setelah perubahan struktur besar, jalankan
composer dump-autoload. - Saat memindahkan file, cek semua
useyang bergantung pada class tersebut.
Bacaan Terkait
- Namespace & Autoloading
- Composer
- MVC
- Pengenalan Laravel
- Panduan Error Laravel
- Target Class Does Not Exist di Laravel: Penyebab dan Solusi
FAQ
Apakah Class not found sama dengan Target class does not exist?
Tidak selalu. Keduanya mirip, tetapi Target class does not exist sering muncul dari container Laravel saat binding atau controller route tidak bisa di-resolve.
Kapan perlu composer dump-autoload?
Saat kamu menambah, memindahkan, atau mengganti namespace class secara manual. Untuk perubahan kecil di isi class, biasanya tidak perlu.
Kenapa macOS saya aman, tetapi server Linux error?
Karena Linux peka terhadap huruf besar-kecil nama file dan folder. Reportservice.php dan ReportService.php dianggap dua nama berbeda.