Saltar al contenido principal
Laravel

Laravel: Target class [ControllerName] does not exist

Cómo resolver el error 'Target class does not exist' en Laravel. Causas por namespace incorrecto, rutas sin grupo y autoload desactualizado.

Error: Target class does not exist

¿Por qué ocurre?

Laravel no puede resolver el controlador o clase porque: - En Laravel 8+: las rutas ya no tienen un namespace por defecto, hay que usar la clase completa - El namespace del controlador no coincide con la ubicación del archivo - El autoloader de Composer no está actualizado tras crear o mover un archivo - Typo en el nombre del controlador en la definición de la ruta - El archivo del controlador tiene el nombre de clase incorrecto dentro

Solución paso a paso

1. Usar la clase completa en las rutas (Laravel 8+)

// ❌ En Laravel 8+, esto ya no funciona por defecto
Route::get('/usuarios', 'UsuarioController@index');

// ✅ Opción 1: usar la clase completa con use use App\Http\Controllers\UsuarioController; Route::get('/usuarios', [UsuarioController::class, 'index']);

// ✅ Opción 2: sintaxis de array con namespace completo Route::get('/usuarios', ['App\Http\Controllers\UsuarioController', 'index']);

2. Regenerar el autoload de Composer

composer dump-autoload

# Si hay errores de sintaxis en PHP composer dump-autoload -o

3. Verificar el namespace del controlador

namespace App\Http\Controllers; // ← debe coincidir con la carpeta

use Illuminate\Http\Request;

class UsuarioController extends Controller { public function index() { return view('usuarios.index'); } }

4. Restaurar el namespace global en routes/web.php (solo si lo necesitas)

// En app/Providers/RouteServiceProvider.php
// Laravel 7 y anteriores tenían esto por defecto
protected $namespace = 'App\\Http\\Controllers';

// Con esto recuperas la sintaxis antigua: Route::get('/usuarios', 'UsuarioController@index');

5. Crear controladores con Artisan (forma correcta)

# Crear controlador básico
php artisan make:controller UsuarioController

# Con método resource (CRUD completo) php artisan make:controller UsuarioController --resource

# Con modelo asociado php artisan make:controller UsuarioController --model=Usuario

6. Verificar la caché de rutas

# Limpiar caché de rutas (muy importante en producción)
php artisan route:clear
php artisan config:clear
php artisan cache:clear

# Ver todas las rutas registradas php artisan route:list

Cómo evitarlo en el futuro

- Usa siempre `ControllerName::class` en lugar de strings para evitar typos - Ejecuta `composer dump-autoload` después de crear o mover clases - En producción, usa `php artisan route:cache` para cachear rutas (y `route:clear` al actualizar) - Crea controladores siempre con `php artisan make:controller` para garantizar namespace correcto

LaravelPHPcontroladoresrutasnamespace

¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:

Generador de Prompts

¿Necesitas desarrollo a medida?

Apps web, IA, módulos ERP — cuéntame tu proyecto.