Estás usando Laravel 8. En una nueva instalación de Laravel 8, no se aplica ningún prefijo de espacio de nombres a tus grupos de rutas en los que se cargan tus rutas.
"En versiones anteriores de Laravel, RouteServiceProvider
contenía una $namespace
propiedad. El valor de esta propiedad se agregaría automáticamente a las definiciones de ruta del controlador y a las llamadas al método action
auxiliar URL::action
. En Laravel 8.x, esta propiedad es null
por defecto. Esto significa que no hay prefijos automáticos de espacio de nombres será realizado por Laravel ". Documentos de Laravel 8.x - Notas de la versión
Debería utilizar el nombre de clase totalmente calificado para sus controladores cuando se refiera a ellos en sus rutas cuando no utilice el prefijo del espacio de nombres.
use App\Http\Controllers\UserController;
Route::get('/users', [UserController::class, 'index']);
Route::get('/users', 'App\Http\Controllers\UserController@index');
Si prefiere la forma antigua:
App\Providers\RouteServiceProvider
:
public function boot()
{
...
Route::prefix('api')
->middleware('api')
->namespace('App\Http\Controllers')
->group(base_path('routes/api.php'));
...
}
Haga esto para cualquier grupo de rutas para el que desee un espacio de nombres declarado.
La $namespace
propiedad:
Aunque se menciona una $namespace
propiedad que se establecerá en usted RouteServiceProvider
en las notas de la versión y se comentará en su, RouteServiceProvider
esto no tiene ningún efecto en sus rutas. Actualmente solo sirve para agregar un prefijo de espacio de nombres para generar URL a las acciones. Por lo tanto, puede configurar esta variable, pero por sí sola no agregará estos prefijos de espacio de nombres, aún tendrá que asegurarse de usar esta variable al agregar el espacio de nombres a los grupos de rutas.
Esta información ahora está en la Guía de actualización
Documentos de Laravel 8.x - Guía de actualización - Enrutamiento
Con lo que muestra la Guía de actualización, lo importante es que está definiendo un espacio de nombres en sus grupos de rutas. Establecer la $namespace
variable por sí sola solo ayuda a generar URL para acciones.
Nuevamente, y no puedo enfatizar esto lo suficiente, la parte importante es configurar el espacio de nombres para los grupos de rutas, lo que simplemente hacen al hacer referencia a la variable miembro $namespace
directamente en el ejemplo.
Actualizar:
Si ha instalado una copia nueva de Laravel 8 desde la versión 8.0.2 laravel/laravel
, puede descomentar la protected $namespace
variable miembro en el RouteServiceProvider
para volver a la forma anterior, ya que los grupos de rutas están configurados para usar esta variable miembro para el espacio de nombres de los grupos.
La única razón para descomentar que agregaría el prefijo del espacio de nombres a los controladores asignados a las rutas es porque los grupos de rutas están configurados para usar esta variable como espacio de nombres:
...
->namespace($this->namespace)
...
Api
carpeta?