La clase de destino [Api \ UserController] no existe
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
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']);
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