Target Class Does Not Exist di Laravel: Penyebab dan Solusi
Error Target class [SomethingController] does not exist. muncul saat Laravel mencoba me-resolve controller, middleware, atau service dari service container, tetapi class yang diminta tidak ditemukan atau tidak bisa di-load.
Sekilas error ini mirip dengan Class not found, tetapi konteksnya lebih spesifik: Laravel sedang mencari target untuk route, binding, alias middleware, atau dependency injection. Jadi sumber masalahnya sering ada di konfigurasi route atau container, bukan hanya di isi class.
Jawaban Singkat
Kalau error ini muncul, biasanya masalahnya salah satu dari tiga hal:
- route memanggil nama controller yang salah,
- alias middleware belum didaftarkan,
- namespace atau import class tidak cocok.
Mulai dari pemanggilnya dulu, bukan dari isi class.
Kapan Error Ini Biasanya Muncul?
- Saat menulis route ke controller baru
- Saat mendaftarkan middleware alias yang salah
- Saat binding service di
AppServiceProvider - Setelah rename namespace atau folder controller
- Setelah upgrade Laravel dan masih memakai pola route lama
Penyebab Paling Umum
1. Controller Tidak Di-import dengan Benar
Class yang di-import PostController, tetapi route memanggil PostsController.
Karena typo satu huruf, Laravel mencoba mencari class yang memang tidak ada.
2. Masih Memakai String Controller Lama
Pada struktur project modern Laravel, lebih aman memakai class constant agar editor dan autoload ikut membantu.
Selain lebih rapi, cara ini juga lebih mudah dideteksi saat refactor.
3. Alias Middleware Tidak Terdaftar
Kalau alias yang terdaftar adalah admin, Laravel akan mencoba mencari target yang tidak ada.
4. File Ada, Tapi Namespace Salah
Kalau route masih mengarah ke App\Http\Controllers\Admin, target yang diminta tetap dianggap tidak ada.
5. Namespace atau Lokasi File Berubah
File controller dipindah ke subfolder Admin, tetapi route masih menunjuk lokasi lama.
6. Cache Route atau Container Masih Stale
Setelah perubahan struktur besar, route cache atau autoload lama bisa membuat Laravel tetap mencari class di path sebelumnya.
Langkah Diagnosis
- Salin nama target class dari pesan error persis seperti aslinya.
- Cari route, alias middleware, atau binding yang memanggil class itu.
- Pastikan class benar-benar ada di path yang sesuai.
- Cocokkan
namespace, nama file, danusestatement. - Kalau semuanya terlihat benar, bersihkan cache dan perbarui autoload.
Pesan Target class does not exist biasanya muncul karena route, middleware, atau binding memanggil nama class yang salah. Jadi cek pemanggilnya dulu, baru isi class-nya.
Langkah Fix
1. Pakai Class Constant di Route
Ini lebih aman daripada string manual karena IDE dan PHP akan membantu mendeteksi typo.
2. Perbaiki Import dan Namespace
Kalau controller ada di app/Http/Controllers/Admin/LaporanController.php, route juga harus mengacu ke namespace itu.
3. Cek Alias Middleware
Pastikan nama alias yang dipakai di route sama persis dengan yang didaftarkan.
4. Perbarui Autoload dan Bersihkan Cache
5. Cek Binding Manual di Container
Kalau kamu memakai binding seperti ini:
pastikan ReportService memang ada, namespace-nya benar, dan file-nya sesuai standar PSR-4.
Contoh Sebelum dan Sesudah
Sebelum
Kalau class yang benar adalah ProdukController, Laravel akan gagal me-resolve target controller.
Sesudah
Kesalahan yang Sering Terjadi
Route Baru Selalu Error, Padahal File Controller Sudah Ada
Biasanya use statement salah, nama class berbeda huruf besar-kecil, atau route masih menunjuk ke nama lama.
Middleware Alias Tidak Dikenali
Periksa apakah alias middleware sudah didaftarkan dan apakah route memakai nama alias yang benar.
Error Muncul Setelah Rename Folder
Biasanya route cache, autoload Composer, atau import class belum ikut diperbarui.
Middleware Sudah Dibuat, Tapi Belum Didaftarkan
Laravel 11+ tetap butuh alias middleware yang benar di bootstrap/app.php. File class saja tidak cukup.
Pencegahan
- Gunakan
php artisan make:controllerdan generator resmi Laravel. - Hindari string controller kalau tidak ada alasan kuat.
- Saat memindahkan file, segera cek semua route, binding, dan middleware yang bergantung padanya.
- Jaga konsistensi nama file dan namespace sesuai PSR-4.
- Setelah refactor struktur, jalankan
composer dump-autoloaddanphp artisan optimize:clear.
Bacaan Terkait
- Cara Mengatasi Class Not Found di Laravel
- Namespace & Autoloading
- Resource Controller
- Middleware Laravel
- Panduan Error Laravel
- Cara Mengatasi 419 Page Expired di Laravel
FAQ
Apa bedanya Target class does not exist dengan Class not found?
Class not found lebih umum. Target class does not exist biasanya muncul saat Laravel container sedang mencoba me-resolve controller, middleware, atau dependency tertentu.
Apakah php artisan route:clear perlu dijalankan?
Kalau kamu pernah memakai route cache atau baru mengubah struktur route/controller, itu sering membantu. php artisan optimize:clear biasanya sudah mencakup kebutuhan ini.
Kenapa error ini sering muncul setelah copy-paste route?
Karena nama controller atau namespace lama sering ikut terbawa dan tidak ikut diganti semuanya.