ไม่มีคลาสเป้าหมาย [Api \ UserController]

Nov 24 2020

ฉันได้รับข้อผิดพลาดนี้ใน Laravel 8 หลังจากใช้ php artisan route: list:

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

คำตอบ

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

เอกสารสำหรับการกำหนดเส้นทาง