ターゲットクラス[Api \ UserController]が存在しません

Nov 24 2020

php artisan route:listを使用した後、Laravel8でこのエラーが発生します:

Illuminate \ Contracts \ Container \ BindingResolutionExceptionターゲットクラス[Api \ UserController]が存在しません。

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);
    }
}

ルート/api.php:

<?php

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

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

Laravelで新しいIm

回答

3 Donkarnash Nov 24 2020 at 06:45

use App\Http\Controllers\Api\UserController名前空間ステートメントをインポートしているので::class、コントローラークラスの表記を使用できます。IDEは文字列とは異なり、パスに移動できるため、追加の利点もあります。

Laravel 8以降、デフォルトの名前空間はApp\Http\ControllersRouteServiceProviderに定義されなくなったと思います。むしろ、$ namespaceプロパティに目的の値を設定してデフォルトの名前空間を定義するのは、開発者の責任です。

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

Larvel 8では、以前のようにルートを書くことはできません。次の構文は次のとおりです。

コントローラ:

<?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');

または

<?php

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

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

ルーティング用のドキュメント