Header Ads Widget

Ticker

6/recent/ticker-posts

Enrutamiento de controlador con prefijo automático Laravel 8: la clase de destino no existe

 Laravel 8 se lanzó oficialmente el 8 de septiembre de 2020. El equipo de laravel lanza una nueva versión de Laravel en cada intervalo de 6 meses con cambios importantes. Como Laravel 8 Non-LTS (versión general), Laravel 8 proporcionará correcciones de errores de 6 meses hasta el 8 de marzo de 2021 y correcciones de seguridad de 1 año hasta el 8 de septiembre de 2021.

Entre los nuevos cambios se encuentra la eliminación del espacio de nombres de ruta predeterminado.

Si crea un nuevo proyecto de Laravel 8, no se aplicará ningún prefijo de espacio de nombres a sus grupos de rutas en los que se cargan sus rutas. Esto provoca un error que dice que la clase de destino no existe .

Según Laravel 8.x Docs

"En versiones anteriores de Laravel, RouteServiceProvider contenía una propiedad de espacio de nombres $. El valor de esta propiedad se agregaría automáticamente a las definiciones de ruta del controlador y a las llamadas al asistente de acción / URL :: método de acción. En Laravel 8.x, esta propiedad es null predeterminado. Esto significa que Laravel no realizará ningún prefijo automático del espacio de nombres ".

Esto simplemente cambia la forma en que hace referencia a los controladores en sus archivos de configuración de enrutamiento.

Deberá usar el nombre de clase completo para sus controladores cuando se refiera a ellos en sus rutas. Por ejemplo:

use App\Http\Controllers\HomeController;

Route::get('/home', 'App\Http\Controllers\HomeController@index');

También puede utilizar la siguiente sintaxis de acción:

use App\Http\Controllers\HomeController;
Route::get('/home', [HomeController::class, 'index']);

Consulte la Guía de actualización: enrutamiento para obtener más información.

Si prefiere agregar el prefijo del espacio de nombres como las versiones anteriores de Laravel, simplemente actualice la siguiente variable en el app > Providers > RouteServiceProvider.phparchivo:

protected $namespace = null;  

Con:

protected $namespace = 'App\Http\Controllers';

A continuación, actualice el boot()método agregando ->namespace($this->namespace)lo siguiente:

public function boot()
{
       $this->configureRateLimiting();

       $this->routes(function () {
            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));

            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));
        });
}

Como resumen, tiene tres formas de solucionar que Laravel 8 no pueda encontrar su controlador con un error de clase Target no existe :

  • Agregue el espacio de nombres al app > Providers > RouteServiceProvider.phparchivo al igual que las versiones anteriores de Laravel,
  • Use el nombre de clase completamente calificado de su controlador en sus archivos de ruta cuando use la sintaxis de cadena,
  • Utilice la sintaxis de acción.

Publicar un comentario

0 Comentarios