Problemas con namespaces en Laravel — Diferencias entre Windows y Linux
En este artículo vamos a ver un error muy común cuando trabajamos con Laravel y namespaces:
“Target class [App\Http\Controllers\Admin\PhotopostController] does not exist.”
Este error puede aparecer incluso cuando el controlador sí existe. Te contaré el caso real que me ocurrió, cómo lo solucioné y qué debes tener en cuenta con el uso de mayúsculas y minúsculas en Laravel.
🔎 El caso real
Creamos un controlador dentro de la carpeta app/Http/Controllers/admin para manejar fotos de un post. El controlador tenía este namespace:
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PhotopostController extends Controller
{
public function store(Request $request)
{
// lógica para guardar
}
}
Y en las rutas (web.php) teníamos lo siguiente:
use App\Http\Controllers\Admin\PhotopostController;
Route::post('posts/{post}/photos', [PhotopostController::class, 'store']);
En local (Windows) funcionaba sin problemas. Pero al subirlo al servidor (Linux) comenzó a dar este error:
Target class [App\Http\Controllers\Admin\PhotopostController] does not exist.
⚡ ¿Por qué funciona en Windows y falla en Linux?
- Windows: El sistema de archivos no distingue mayúsculas de minúsculas.
- Linux: El sistema de archivos sí distingue mayúsculas y minúsculas.
✅ La solución aplicada
1. Ajustar todo a minúsculas (temporal)
app/Http/Controllers/admin
namespace App\Http\Controllers\admin;
use App\Http\Controllers\admin\PhotopostController;
2. Usar la convención oficial (recomendado)
app/Http/Controllers/Admin
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Admin\PhotopostController;
php artisan make:controller Admin/PhotopostController
🔹 Recomendaciones finales
- Respeta la convención de Laravel.
- Carpetas raíz (
app,routes) → minúsculas. - Namespaces y carpetas que contienen clases → Mayúscula inicial.
- Carpetas raíz (
- Sé consistente con mayúsculas/minúsculas en carpetas, namespaces y use.
- Cuidado con el sistema operativo (Windows vs Linux).
- Recomendación: crea controladores con Artisan.
php artisan make:controller Admin/PhotopostController
🚀 Conclusión
El error muchas veces no es que la clase no exista, sino que el namespace y la estructura de carpetas no coinciden exactamente. Sigue las convenciones y evitarás este tipo de errores.