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:

  1. nama class,
  2. namespace,
  3. lokasi file,
  4. use statement 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:

<?php

namespace App\Service;

class ReportService
{
}

Folder Services tidak cocok dengan namespace App\Service.

2. Nama Class dan File Tidak Selaras

<?php

namespace App\Services;

class Productservice
{
}

File ProductService.php dengan class Productservice terlihat hampir sama, tetapi tetap memicu error di environment yang lebih ketat.

3. Lupa Import Class dengan use

<?php

namespace App\Http\Controllers;

class PostController extends Controller
{
    public function index()
    {
        $posts = Post::latest()->get();
    }
}

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, bukan App\User
  • request ada di App\Http\Requests\StorePostRequest
  • middleware ada di App\Http\Middleware

Langkah Diagnosis

  1. Salin nama class yang muncul di pesan error persis seperti aslinya.
  2. Cari deklarasi class tersebut di project.
  3. Cocokkan tiga hal:
    • path file
    • namespace
    • nama class
  4. Pastikan file yang memakai class itu punya use yang benar.
  5. Jika struktur sudah benar, perbarui autoload Composer.
Cocokkan dari Ujung ke Ujung

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

<?php

namespace App\Services;

class ReportService
{
}

2. Tambahkan use yang Tepat

<?php

namespace App\Http\Controllers;

use App\Models\Post;

class PostController extends Controller
{
    public function index()
    {
        $posts = Post::latest()->get();
    }
}

3. Samakan Nama File dengan Nama Class

Gunakan:

  • ReportService.php untuk class ReportService
  • StorePostRequest.php untuk class StorePostRequest

4. Perbarui Autoload Composer

composer dump-autoload

Jika error masih terasa "menempel", bersihkan cache Laravel juga:

php artisan optimize:clear

5. Gunakan Generator Artisan Jika Tersedia

Daripada membuat file manual, lebih aman memakai:

php artisan make:model Post
php artisan make:controller PostController
php artisan make:request StorePostRequest

Artisan otomatis membuat path, namespace, dan nama class yang konsisten.

Contoh Sebelum dan Sesudah

Sebelum

<?php

namespace App\Http\Controllers;

class LaporanController extends Controller
{
    public function index()
    {
        $service = new ReportService();
        return $service->summary();
    }
}

Class ReportService akan dicari di namespace controller kalau tidak di-import.

Sesudah

<?php

namespace App\Http\Controllers;

use App\Services\ReportService;

class LaporanController extends Controller
{
    public function index()
    {
        $service = new ReportService();
        return $service->summary();
    }
}

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

  1. Gunakan php artisan make:* saat membuat class Laravel.
  2. Ikuti aturan PSR-4: namespace, folder, dan nama file harus selaras.
  3. Pakai satu gaya penamaan yang konsisten untuk folder dan class.
  4. Setelah perubahan struktur besar, jalankan composer dump-autoload.
  5. Saat memindahkan file, cek semua use yang bergantung pada class tersebut.

Bacaan Terkait

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.