Laravel 8(版本8.35.1):目标类不存在

10 浏览
0 Comments

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

0
0 Comments

在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"的问题。

0
0 Comments

当我尝试这个代码时,它对我来说很好用。

问题的原因是在以下代码中:

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"的问题。

0