Laravel 8(版本8.35.1):目标类不存在
Laravel 8(版本8.35.1):目标类不存在
我使用的是laravel 8.35.1版本。我有一个api资源控制器 "ProductController"。在我的路由文件api.php中,我定义了以下路由:
api.php
use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); }); Route::apiResource('/products', 'App\Http\Controllers\ProductController'); Route::group(['prefix' => 'products'], function () { Route::apiResource('/{product}/review', 'App\Http\Controllers\ReviewController'); });
注意:
它工作正常,但是当我删除控制器的完整路径,只写Route::apiResource('/products', 'ProductController');
时,会显示错误
Target class [ProductController] does not exist.
在首次清除缓存之前,我想摆脱完整的路径。并且我想将控制器放在Api文件夹中,所以如何定义该路由也是我的问题。
我也尝试了ProductController::class
,但没有正常工作。
更新:
当我按照laravel 8文档的路由方式进行使用时,它可以正常工作。但是当我将控制器文件移动到Api文件夹,然后声明路由的名称空间时,例如use App\Http\Controllers\Api\ProductController;
,又会出现错误。
use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\ProductController; use App\Http\Controllers\ReviewController; Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); }); Route::apiResource('/products', ProductController::class); Route::group(['prefix' => 'products'], function () { Route::apiResource('/{products}/reviews', ReviewController::class); });
在Laravel 8 (version 8.35.1)中出现了"Target class does not exist"的问题。这个问题的出现有以下原因和解决方法。
原因:
在路由中声明控制器时,不需要使用类。
解决方法:
将'ProductController'改为ProductController::class。
代码示例:
// 原有代码 Route::get('/product', 'ProductController@index'); // 修改后的代码 Route::get('/product', ProductController::class.'@index');
通过按照上述解决方法修改代码,可以解决"Laravel 8 (version 8.35.1): Target class does not exist"的问题。
当我尝试这个代码时,它对我来说很好用。
问题的原因是在以下代码中:
Route::group(['prefix' => 'products'], function () { Route::apiResource('/{product}/reviews', [ReviewController::class, 'ReviewController']); });
解决方法是将 `[ReviewController::class, 'ReviewController']` 改为 `ReviewController::class`。
修改后的代码如下:
Route::group(['prefix' => 'products'], function () { Route::apiResource('/{product}/reviews', ReviewController::class); });
这样就解决了"Target class does not exist"的问题。