A classe de destino [Api \ UserController] não existe

Nov 24 2020

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

3 Donkarnash Nov 24 2020 at 06:45

Como você está importando a use App\Http\Controllers\Api\UserControllerinstrução de namespace, pode usar a ::classnotaçã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\Controllersno 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']);
MuditGulgulia Nov 24 2020 at 12:33

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