验证错误处理 Laravel Sanctum Api in JSON

Validation Error Handing Laravel Sanctum Api in JSON

Laravel 通常使用下面的请求验证。

 $request->validate([
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users', 'required_without_all:phone'],
            'password' => ['required', 'confirmed', Rules\Password::defaults()],
            'phone' => ['required', 'string', 'max:13', 'unique:users', 'required_without_all:email'],
        ]);

此方法仅添加 $error 变量,可以使用 blade 文件访问该变量,因为它仅在服务器上呈现。但是现在我使用的是 api Sanctum 它只是显示 404。我猜它只是重定向回请求并且 $error 是 session 可以通过 PHP 访问只有.

有解决办法

$validator = Validator::make($request->all(), [
                'name' => ['required', 'string', 'max:255'],
                'email' => ['string', 'email', 'max:255', 'unique:users', 'required_without_all:phone'],
                'password' => ['required', 'confirmed', Rules\Password::defaults()],
                'phone' => ['string', 'max:13', 'unique:users', 'required_without_all:email'],
    ]);
    if ($validator->fails()) {
        return response()->json($validator->errors());
    }

那只是添加额外的行,我不希望每次都使用这一行。 有人可以帮我编辑验证功能,它只是 return 任何 $error as json only.

澄清答案

我是自我认证的菜鸟,让我用 fetch 让它变得像我的大脑可以理解的那样

let y = await fetch("http://127.0.0.1:8000/api/register", {
  method: "POST", // or 'PUT'
  headers: {
    "Accept" : "application/json",
    "Content-Type": "application/json",
  },
  body: JSON.stringify(x),
}).then(response => response.json());
console.log(y);

我认为这是错误的方式,因为存在 {"Accept":application/json", "Content-Type": "application/json",} 并且接受很重要,不需要在 back-end.

中完成

你不需要自己处理。

只需确保您的请求发送正确 header:Accept: application/json

helps Laravel 知道您想要 json 响应而不是重定向(导致 404)。

Sample snippet