Salah satu error yang sering membingungkan pemula Laravel adalah:
Illuminate\Contracts\Container\BindingResolutionException:
Target class [App\Http\Controllers\HomeController] does not exist.
Error ini muncul saat Laravel gagal menemukan controller yang Anda daftarkan di route. Berikut penyebab paling umum dan solusinya.
1. Salah Menulis Nama atau Namespace Controller
Pastikan cara Anda mendaftarkan route sesuai versi Laravel. Di Laravel 8+, gunakan sintaks class yang eksplisit:
use App\Http\Controllers\HomeController;
Route::get('/', [HomeController::class, 'index']);
Hindari sintaks string lama 'HomeController@index' kecuali Anda mengatur namespace controller secara manual di RouteServiceProvider.
2. Namespace di File Controller Salah
Buka file controllernya dan pastikan deklarasi namespace di baris atas benar dan sesuai lokasi folder:
<?php
namespace App\Http\Controllers;
class HomeController extends Controller
{
public function index() { /* ... */ }
}
Jika controller ada di subfolder (mis. Controllers/Admin), namespace-nya harus App\Http\Controllers\Admin.
3. Composer Autoload Belum Diperbarui
Kalau Anda baru membuat controller (apalagi manual, bukan lewat artisan), Composer mungkin belum mengenalinya. Regenerasi autoload:
composer dump-autoload
Ini solusi yang paling sering berhasil untuk error "class not found" setelah menambah file baru.
4. Nama File Tidak Cocok dengan Nama Class
Laravel memakai PSR-4 autoloading, jadi nama file harus sama persis dengan nama class, termasuk huruf besar/kecil. Class HomeController wajib berada di file HomeController.php โ bukan homecontroller.php. Ini sering jadi masalah saat pindah dari Windows (case-insensitive) ke server Linux (case-sensitive).
5. Cache Route Lama
Jika route ter-cache sebelum controller dibuat, bersihkan:
php artisan route:clear
php artisan config:clear
Checklist Cepat
- Route memakai sintaks
[NamaController::class, 'method']+use? - Namespace di file controller benar?
- Sudah jalankan
composer dump-autoload? - Nama file sama persis dengan nama class (case-sensitive)?
- Sudah
route:clear?
Kesimpulan
Error "Target class does not exist" hampir selalu soal namespace, penulisan nama, atau autoload yang belum diperbarui. Mulai dari memeriksa route & namespace, lalu jalankan composer dump-autoload โ dua langkah ini menyelesaikan mayoritas kasus. Ingat pula soal case-sensitive saat aplikasi Anda berjalan di server Linux.