A classe de destino [Api \ UserController] não existe
estou recebendo este erro no Laravel 8 depois de usar php artisan route: list:
Illuminate \ Contracts \ Container \ BindingResolutionException A classe de destino [Api \ UserController] não existe.
Eu tenho um controlador em 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);
}
}
routes / api.php:
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\UserController;
Route::get('users', 'Api\\UserController@index');
Eu sou novo no Laravel
Respostas
Como você está importando a use App\Http\Controllers\Api\UserController
instrução de namespace, pode usar a ::class
notação para a classe do controlador. Também terá benefícios adicionais, pois o IDE será capaz de navegar para o caminho ao contrário da string
Desde o Laravel 8, eu acho que o namespace padrão não está mais definido para estar App\Http\Controllers
no RouteServiceProvider, ao invés disso, é deixado para o desenvolvedor definir o namespace padrão configurando a propriedade $ namespace com o valor desejado.
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\UserController;
Route::get('users', [UserController::class, 'index']);
No Larvel 8 você não pode fazer uma rota correta como costumávamos fazer antes, a próxima sintaxe é 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');
Ou
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\UserController;
Route::get('/Pages', [UserController::class, 'index']);
Documentos para roteamento