php - 目标类控制器不存在 - Laravel 8
问题描述
这是我的控制器:
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class RegisterController extends Controller
{
public function register(Request $request)
{
dd('aa');
}
}
如屏幕截图所示,该类存在并且位于正确的位置:
我的api.php
路线:
Route::get('register', 'Api\RegisterController@register');
当我register
使用 Postman 到达我的路线时,它给了我以下错误:
目标类 [Api\RegisterController] 不存在。
更新:
感谢答案,我能够修复它。我决定为这条路线使用完全限定的类名,但还有其他选项,如答案中所述。
Route::get('register', 'App\Http\Controllers\Api\RegisterController@register');
解决方案
您正在使用 Laravel 8。在全新安装的 Laravel 8 中,没有将命名空间前缀应用于您的路由加载到的路由组。
“在以前的 Laravel 版本中,
RouteServiceProvider
包含一个$namespace
属性。这个属性的值将自动添加到控制器路由定义和对action
助手/URL::action
方法的调用中。在 Laravel 8.x 中,默认情况下,这个属性null
。这意味着没有自动命名空间前缀将由 Laravel 完成。” Laravel 8.x 文档 - 发行说明
在不使用命名空间前缀的情况下,在路由中引用控制器时,您必须为控制器使用完全限定的类名。
use App\Http\Controllers\UserController;
Route::get('/users', [UserController::class, 'index']);
// or
Route::get('/users', 'App\Http\Controllers\UserController@index');
如果您更喜欢旧方式:
App\Providers\RouteServiceProvider
:
public function boot()
{
...
Route::prefix('api')
->middleware('api')
->namespace('App\Http\Controllers') // <---------
->group(base_path('routes/api.php'));
...
}
对您想要为其声明命名空间的任何路由组执行此操作。
物业$namespace
:
尽管在发行说明中提到要在您的$namespace
属性上设置并在您的注释中评论这对您的路线没有任何影响。它目前仅用于添加命名空间前缀以生成操作的 URL。所以你可以设置这个变量,但它本身不会添加这些命名空间前缀,你仍然必须确保在将命名空间添加到路由组时使用这个变量。RouteServiceProvider
RouteServiceProvider
此信息现在位于升级指南中
升级指南显示的重要部分是您在路由组上定义命名空间。单独设置$namespace
变量仅有助于生成操作的 URL。
再一次,我不能强调这一点,重要的部分是为路由组设置命名空间,他们恰好通过$namespace
在示例中直接引用成员变量来做到这一点。
更新:
如果您从 8.0.2 版开始安装了 Laravel 8 的新副本,则laravel/laravel
可以取消注释中的protected $namespace
成员变量RouteServiceProvider
以返回旧方式,因为路由组已设置为将此成员变量用于组的命名空间。
// protected $namespace = 'App\\Http\\Controllers';
取消注释会将命名空间前缀添加到分配给路由的控制器的唯一原因是因为路由组设置为使用此变量作为命名空间:
...
->namespace($this->namespace)
...
推荐阅读
- visual-studio-code - vs 代码扩展未显示在底部栏中
- php - 如何进行数组 xpath 查询?
- eclipse - 无法在 Eclipse 上安装 Checkstyle 插件
- typescript - 当值未定义时,对象键不显示
- opensips - OpenSIPS,通过推送通知注册时如何避免重复邀请?
- java - 如何在 Firestore Android 中获取子集合的文档 ID
- reactjs - 用数百个 URL 调用 cache.addAll()?
- java - 在 Selenium TestNG 中,我想在多个会话中同时执行相同的测试用例。我应该在xml中添加什么属性?
- excel - 将数据透视表转换为交叉引用表
- python - 我收到一个 AttributeError - Python GUI Programming with Tkinter 作者:Alan D Moore