如果在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的新手。 任何帮助将不胜感激。
答案 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);
}
});