laravel API 接口使用 Validator 无法返回具体的未通过验证的错误信息

发布于 2022-09-04 00:54:08 字数 452 浏览 16 评论 0

API 接口中使用 Validator 对表单进行验证;
当有为通过验证的项时;
都是返回

{
  "message": "The given data failed to pass validation.",
  "status_code": 500
}

无法返回具体的未通过验证的信息;
那前端或者移动端接到返回的错误信息的时候;
并不能告诉用户到底是哪一项不符合要求;
我想要的是这样的;

{
  "message": "邮箱已经注册",
  "status_code": 500
}

{
  "message": "必须是6-16位的密码",
  "status_code": 500
}

请教亲们;需要怎么做?

亲们用 laravel 写接口的时候;
提交的表单字段是怎么验证的?怎么返回验证结果的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

作死小能手 2022-09-11 00:54:08

Laravel 是可以自定义错误格式的,需要在控制器基类中重写 formatValidationErrors 方法

use Illuminate\Contracts\Validation\Validator;

protected function formatValidationErrors(Validator $validator)
{
     $message = $validator->errors()->first();
     return ['message'=>$message, 'status_code' => 500];
}

你还可以按照你自己的需求进行扩展,上面只是一个简单的例子,返回的是第一个错误信息.

如果你使用 dingo/api 验证处理

当然你也可以在

if ($validator->fails()) {
     //自行封装个处理验证失败返回值 类似下面
     $this->respondWithValidatorError($validator->errors());    
}
凡尘雨 2022-09-11 00:54:08

如果是用dingo/api的话,可以这样:

<?php

namespace App\Requests;

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Symfony\Component\HttpKernel\Exception\HttpException; // 注意是抛出这个类型的异常。

class UpdateUserPut extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    // 主要是重写这个方法。
    protected function failedValidation(Validator $validator)
    {
        throw new HttpException(500, $validator->errors()->first());
    }

    public function rules()
    {
        return [
            // 你的验证规则。
        ];
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文