【问题标题】:Laravel 8 (version 8.35.1): Target class does not existLaravel 8(版本 8.35.1):目标类不存在
【发布时间】:2021-07-01 01:15:56
【问题描述】:

我使用的是 laravel 8.35.1 版本。我有一个 api 资源控制器 "ProductController"。在我的路由文件 api.php。我这样定义路线:

api.php

<?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'); 它显示错误

目标类 [ProductController] 不存在。

在第一次清除缓存之前。我想摆脱完整的路径。第二个想把控制器放在 Api 文件夹中,那么如何定义路由。 我也尝试过ProductController::class,但效果不佳

更新 当我根据 laravel 8 文档使用路线时。 https://laravel.com/docs/8.x/controllers#resource-controllers 工作正常。但是当将控制器文件移动到 Api 文件夹时,然后声明路由名称空间,如 use App\Http\Controllers\Api\ProductController; 再次显示错误

<?php

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

【问题讨论】:

  • 非常感谢,但@KamleshPaul 请检查更新的部分。那么如何解决呢。
  • 在移动到Api 子文件夹后,您是否也更新了控制器文件中的namespace ...; 以反映这一点?
  • 是的,我做到了@msbit。 "命名空间 App\Http\Controllers\Api;"
  • 如果ProductController.php中的命名空间与routes/api.php中对应的use ...匹配,那么应该可以找到。是不是完全一样的错误?

标签: laravel api laravel-routing


【解决方案1】:

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

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ReviewController;

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}/reviews', [ReviewController::class, 'ReviewController']);
});

【讨论】:

    【解决方案2】:

    您不必在路由中声明控制器上使用类。 您可以更改“ProductController”而不是 ProductController::class

    【讨论】:

      猜你喜欢
      • 2021-04-09
      • 2021-01-18
      • 2021-04-27
      • 2021-01-26
      • 2021-01-25
      • 2021-02-26
      • 2020-12-27
      相关资源
      最近更新 更多