ไม่มีคลาสเป้าหมาย [Api \ UserController]
ฉันได้รับข้อผิดพลาดนี้ใน 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
คำตอบ
เนื่องจากคุณกำลังนำเข้า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']);
ใน 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']);
เอกสารสำหรับการกำหนดเส้นทาง