La clase de destino [Api \ UserController] no existe

Nov 24 2020

Recibo este error en Laravel 8 después de usar php artisan route: list:

Illuminate \ Contracts \ Container \ BindingResolutionException La clase de destino [Api \ UserController] no existe.

Tengo un controlador en App \ Http \ Controllers \ Api:

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index()
    {
        $users = User::all(); return responde()->json($users);
    }
}

rutas / api.php:

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\UserController;

Route::get('users', 'Api\\UserController@index');

Soy nuevo en Laravel

Respuestas

3 Donkarnash Nov 24 2020 at 06:45

Dado que está importando la use App\Http\Controllers\Api\UserControllerdeclaración del espacio de nombres, puede usar la ::classnotación para la clase del controlador. También tendrá beneficios adicionales ya que IDE podrá navegar a la ruta a diferencia de la cadena

Desde Laravel 8, supongo que el espacio de nombres predeterminado ya no está definido para estar App\Http\Controllersen RouteServiceProvider, sino que se deja en manos del desarrollador definir el espacio de nombres predeterminado configurando la propiedad $ namespace con el valor deseado.

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\UserController;

Route::get('users', [UserController::class, 'index']);
MuditGulgulia Nov 24 2020 at 12:33

En Larvel 8 no se puede hacer la ruta correcta como solíamos hacerlo antes, la siguiente sintaxis es esta

Controlador:

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
user App\Models\User;

class UserController extends Controller
{
    public function index()
    {
        $users = User::all(); return responde()->json($users);
    }
}

api.php:

<?php

use Illuminate\Support\Facades\Route;

Route::get('users', '\App\Http\Controllers\Api\UserController@index');

O

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\UserController;

Route::get('/Pages', [UserController::class, 'index']);

Documentos para enrutamiento