ターゲットクラス[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\Controllers
RouteServiceProviderに定義されなくなったと思います。むしろ、$ 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']);
ルーティング用のドキュメント