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.
¿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
¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:
Generador de Prompts