【问题标题】:Laravel 5.x (master) Form Request validation response as a jsonLaravel 5.x(主)表单请求验证响应为 json
【发布时间】:2016-03-18 20:30:58
【问题描述】:

有没有办法将表单请求错误作为 json 返回?

我正在为 AngularJS 创建一个 API,但我遇到了错误标志问题

这是我的规则:

class CreateProductRequest extends Request
{
    public function rules()
    {
    return [
            'code'=>'required|unique:products',
            'style'=>'required|max:12',
            'measure'=>'required|max:12',
        ];
    }

这是来自 CreateProductRequest 的响应

{
    code: [0: "Code is required"],
    style:[0: "Style is required"],
    measure:[ 0: "Measure is required"]
}

我希望控制器上的结果与 $validator->errors()->all() 相同,如下所示:

"messages": [
    "Code is required",
    "Style is required",
    "Measure is required"
]

如何从表单请求中获得此结果?

Laravel 版本:大师

【问题讨论】:

  • 您能否澄清一下“表单请求验证响应为 JSON”和“我想要与控制器上的 $validator->errors()->all() 相同的结果”是什么意思?跨度>

标签: php angularjs json laravel laravel-5.1


【解决方案1】:

表单请求错误已作为 AJAX 请求的 json 返回。但是要实现你想要的结构,你必须重写 vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php 中的响应函数

从那里复制函数并将其粘贴到 app/Http/Requests/Request.php 的 Request 类中。更改以下行:

    return new JsonResponse($errors, 422);

到这里:

    $messages = array();
    foreach ($errors as $element) {
        foreach ($element as $element_error) {
            $messages[] = $element_error;
        }
    }
    $response['messages'] = $messages;
    $response['status'] = 'error';
    return new JsonResponse($response, 200);

除了 200,您还可以返回您已经使用的任何其他状态代码,可能来自 4xx 系列。 在这个文件的顶部添加这个:

use Illuminate\Http\JsonResponse;

【讨论】:

  • 你是最棒的。谢谢您的帮助。我唯一改变的是这条线 $messages[] = $element_error;$messages[] = ["message" => $element_error];,使其适用于 angular ng-repeat
【解决方案2】:

试试这个

return $validator->errors()->all()->toJson();

【讨论】:

  • 感谢您的帮助,但@Vikas 的答案是正确的,我必须覆盖 FormRequest 类的响应。
猜你喜欢
  • 2016-05-20
  • 2017-03-29
  • 2015-10-05
  • 1970-01-01
  • 2016-09-02
  • 2021-10-30
  • 2015-08-12
  • 2015-12-24
相关资源
最近更新 更多