【发布时间】: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