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

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

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

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

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

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

请教亲们;需要怎么做?

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

验证数据的话一般用 FormRequest 表单验证. 也可以在控制器中使用ValidatesRequests这个trail.

使用命令php artisan make:request RegisterUserRequest 可以生成一个表单验证,在Http/Requests中。

RegisterUserRequest 里面有个rules方法,返回的是validator的规则数组。

return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ];

如果需要返回ajax的消息,在请求中带上header'X-Requested-With','XMLHttpRequest',或者重写ajax()方法,始终return true.

如果要自定义返回的消息,重写 messages() 方法,返回一个数组:

$messages = [
    'same'    => ':attribute 和 :other 必须相同。',
    'size'    => ':attribute 必须是 :size。',
    'between' => ':attribute 必须介于 :min - :max。',
    'in'      => ':attribute 必须是以下的类型之一: :values。',
];

在控制器方法依赖注入时用RegisterUserRequest 替换request就行。

public function register(RegisterUserRequest  $request)
{
    .....
}
7年前 评论

忽然想起来这个问题在 sf 上面有答案了;放个链接给后面看到的童鞋: laravel API 接口使用 Validator 无法返回具体的未通过验证的错误信息

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!