修复 Laravel 8 中的“目标类控制器不存在”错误
使用 Laravel 8 时,您可能会遇到以下错误:“目标类 [ApiRegisterController] 不存在。”这是由于 Laravel 处理路由组中命名空间前缀的方式发生了变化。
在 Laravel 8 中,RouteServiceProvider 中的 $namespace 属性(之前为控制器路由定义添加了前缀)现在设置为 null默认。这意味着在路由中引用控制器时必须使用完全限定的类名。
要解决此问题,您有多种选择:
使用完全限定的类名:
在路由中使用控制器的完全限定类名称。例如:
Route::get('register', 'App\Http\Controllers\Api\RegisterController@register');
在路由组中定义命名空间前缀:
如果您更喜欢旧方法,您可以在 RouteServiceProvider 中为路由组定义命名空间前缀。操作方法如下:
public function boot() { ... Route::prefix('api') ->middleware('api') ->namespace('App\Http\Controllers') ->group(base_path('routes/api.php')); ... }
设置 $namespace 属性:
虽然在某些资料中提到取消注释 RouteServiceProvider 中的 $namespace 属性,但它只会影响 URL 生成actions 并且不会自行将命名空间前缀添加到路由中。
Laravel 更新8.0.2 及更高版本:
如果您从 8.0.2 版本开始安装了 Laravel 8 的全新副本,则可以取消注释 RouteServiceProvider 中受保护的 $namespace 成员变量以恢复到旧的行为。
记住,关键是为你的路由组定义一个命名空间前缀,根据你的喜好,你可以选择上面提到的任何方法来修复Laravel 8 中出现“目标类控制器不存在”错误。
以上是如何修复 Laravel 8 中的'目标类控制器不存在”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!