La classe cible [Api \ UserController] n'existe pas

Nov 24 2020

Je reçois cette erreur dans Laravel 8 après avoir utilisé php artisan route: list:

Illuminate \ Contracts \ Container \ BindingResolutionException La classe cible [Api \ UserController] n'existe pas.

J'ai un contrôleur dans 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');

Je suis nouveau chez Laravel

Réponses

3 Donkarnash Nov 24 2020 at 06:45

Puisque vous importez l' use App\Http\Controllers\Api\UserControllerinstruction d'espace de noms, vous pouvez utiliser la ::classnotation pour la classe de contrôleur. Cela aura également des avantages supplémentaires car l'EDI pourra naviguer vers le chemin contrairement à la chaîne

Depuis Laravel 8, je suppose que l'espace de noms par défaut n'est plus défini comme étant App\Http\Controllersdans RouteServiceProvider, il appartient plutôt au développeur de définir l'espace de noms par défaut en définissant la propriété $ namespace avec la valeur souhaitée.

<?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

Sur Larvel 8, vous ne pouvez pas gérer l'itinéraire comme nous le faisions auparavant, la syntaxe suivante est la suivante

Manette:

<?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 alors

<?php

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

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

Documents pour le routage