如果在FormRequest Laravel中验证失败,如何在响应中添加额外数据

时间:2017-09-25 16:41:57

标签: php laravel laravel-5

如果在FormRequest中验证失败,我需要在响应中添加自定义标记。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreMessage extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required|max:100',
            'email' => 'required|email',
            'message' => 'required|max:1000'
        ];
    }

    public function withValidator(\Illuminate\Validation\Validator $validator)
    {
        $validator->after(function ($validator) {

               if($validator->fails()) {
                   $validator->errors()->add('status', 'error');
               }

        });
    }

}

如果我的任何验证失败,那么我需要在json响应中添加status = error,否则我需要添加status = success

此外,我的回复状态嵌套在errors标记下我需要它在0级。

    {
  "message": "The given data was invalid.",
  "errors": {
    "name": [
      "The name may not be greater than 100 characters."
    ],
    "status": [
      "error"
    ]
  }
}

这样做的目的是我发送Ajax请求提交表单我需要一个标志来识别是否发生错误。有没有更好的方法来做到这一点。 如果我问愚蠢的问题,请原谅我。我是laravel的新手。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

From the docs(搜索&#34; AJAX&#34;):

  

在AJAX请求期间使用validate方法时,Laravel不会生成重定向响应。相反,Laravel会生成包含所有验证错误的JSON响应。此JSON响应将使用422 HTTP状态代码发送。

在您的Javascript中,您可以在a .fail() handler中发现这种情况。

更新简单示例,不处理格式化多个验证错误,但为您提供了这个想法:

$.ajax( ... )
.fail(function(xhr, status, error) {
    if (error === 'Unprocessable Entity') {
        // validation failure
        var msg = '';    
        for (error in xhr.responseJSON) {
            msg += xhr.responseJSON[error];
        };
        alert(msg);
    }
});