laravel 为什么会出现此错误目标类[Auth\UserAuthController]不存在

wlzqhblo  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(207)

我尝试使用larval passport来响应API中的令牌
我流这个博客为我的代码https://blog.logrocket.com/laravel-passport-a-tutorial-and-example-build/
我得到这个错误照明\合同\容器\绑定解决异常:目的类别[验证\使用者验证控制器]

t9aqgxwy

t9aqgxwy1#

它看起来像是在寻找文本类:Auth\UserAuthController。这不是完整的命名空间。您要在以下位置查找它:App\Http\Controllers\Auth\UserAuthController。这看起来像是您的路由文件配置的问题。请参阅https://laravel.com/docs/9.x/routinghttps://laravel.com/docs/9.x/controllers或您正在使用的laravel版本。有不同的方法来处理事情。
我通常通过指定完整的名称空间来组织路由,如下所示:

use App\Http\Controllers\Auth\UserAuthController;
use App\Http\Controllers\EmployeeController;

// ...

Route::post('/register', [UserAuthController::class, 'register']);
Route::post('/login', [UserAuthController::class, 'login']);

Route::apiResource('/employee', EmployeeController::class)->middleware('auth:api');

另请参阅https://litvinjuan.medium.com/how-to-fix-target-class-does-not-exist-in-laravel-8-f9e28b79f8b4
在Laravel 7之前,RouteServiceProvider.php文件包含以下代码:

protected $namespace = 'App\Http\Controllers';
Route::middleware('web')
    ->namespace($this->namespace)
    ->group(base_path('routes/web.php'));

它的作用是告诉Laravel使用Web中间件和App\Http\Controllers名称空间加载routes/web.php中的路由,这意味着无论何时使用字符串语法声明路由,Laravel都会在App\Http\Controllers文件夹中查找该控制器。
在Laravel 8中,$namespace变量被删除,Route声明被更改为:

Route::middleware('web')
    ->group(base_path('routes/web.php'));

这意味着从Laravel 8开始,当您使用字符串语法声明路由时,Laravel不会在App\Http\Controllers中查找您的控制器。
您也可以通过在RoutesServiceProvider.php文件中添加3行代码来手动添加名称空间:

protected $namespace = 'App\Http\Controllers'; // Add this line

public function boot() {
    $this->configureRateLimiting();

    $this->routes(function() {
        Route::middleware('web')
            ->namespace($this->namespace) // Add this line
            ->group(base_path('routes/web.php'));

        Route::prefix('api')
            ->middleware('api')
            ->namespace($this->namespace) // Add this line
            ->group(base_path('routes/api.php'));
    });
}

但通常laravel 8+的做法是在routes文件中使用use::class,并为控制器指定完整的名称空间。

编辑:

在Postman中,您可以将邮件发送到:

http://127.0.0.1:8000/api/register

并指定字段:
名称、电子邮件、密码和密码确认。
确保电子邮件使用有效的电子邮件地址语法。
确保密码与password_confirmation匹配。
确保您使用的是x-www-form-urlencoded。
对于名称,我使用了:一种
对于电子邮件,我使用了:a@b.com
对于密码,我使用了:一种
对于password_confirmation,我使用了:一种

如果遇到验证错误,您也可以调试它:
编辑UserAuthController.php文件,而不是使用:

$data = $request->validate([
        'name' => 'required|max:255',
        'email' => 'required|email|unique:users',
        'password' => 'required|confirmed',
    ]);

请使用try-catch,如下所示:

try {
    $data = $request->validate([
        'name' => 'required|max:255',
        'email' => 'required|email|unique:users',
        'password' => 'required|confirmed',
    ]);
} catch (\Illuminate\Validation\ValidationException $e){
    return response($e->getMessage(), 400);
}

假设它能正常工作,您将在用户表中看到一个条目:

相关问题