Laravel配置api路由后报Target class [PageController] does not exist如何解决
报错原因
Laravel 8及后续版本的routes/api.php默认移除了控制器全局命名空间前缀,你在路由中直接使用PageController::class时,路由文件没有导入该控制器的完整命名空间,所以无法找到对应类。
解决步骤
- 核对控制器命名空间和类名
打开你的PageController.php文件,确认顶部命名空间声明和类名正确,按你给出的存放路径,控制器位于app/Http/Controllers目录下,所以命名空间必须为:
同时确认类名拼写、大小写和文件名完全匹配:namespace App\Http\Controllers;class PageController extends Controller - 在api.php中导入控制器
在api.php顶部的导入区域新增一行PageController的导入语句:
修改后的use App\Http\Controllers\PageController;api.php完整代码如下:<?php use Illuminate\Http\Request; use App\Http\Controllers\PageController; Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); }); Route::post('summitRegistration',[PageController::class,'summitRegistration']); - 清理路由缓存
若修改后仍报错,在Git Bash执行以下命令清理旧的路由缓存即可:
生产环境部署时可以执行php artisan route:clearphp artisan route:cache重新生成路由缓存提升性能。 - 可选替代方案
如果你不想每个控制器都单独导入,可以修改app/Providers/RouteServiceProvider.php,在api路由的注册配置中加上->namespace($this->namespace),即可恢复Laravel 7及之前版本的全局控制器命名空间前缀规则,不过更推荐单独导入的写法,代码可读性和兼容性更好。
内容的提问来源于stack exchange,提问作者azim
相关产品推荐
相关产品推荐

