我正在从Laravel 3升级到Laravel 4.我的应用程序有一些仅支持AJAX的表单,这些表单呈现在客户端(即没有服务器端视图)。因此,我没有将验证错误传递给使用 withErrors()方法的视图,而是将验证错误对象作为JSON结构返回给客户端。
在Laravel 3中,我有这个:
$validation = Validator::make(Input::all(), $rules);
if($validation->fails())
{
return json_encode($validation->errors);
}
//else handle task
但是在Laravel 4中,错误消息受到保护:
$validation = Validator::make(Input::all(), $rules);
if($validation->fails())
{
var_dump($validation->messages());
return json_encode($validation->messages());
}
//else handle task
var_dump($ validation-> messages())返回:
object(Illuminate\Support\MessageBag)[333]
protected 'messages' =>
array (size=1)
'delete_confirm_password' =>
array (size=1)
0 => string 'The delete confirm password field is required.' (length=46)
protected 'format' => string ':message' (length=8)
json_encode($ validation->条消息)返回
{}
问题:如何在Laravel 4中将所有字段的所有验证错误消息作为JSON结构返回?
答案 0 :(得分:58)
只需使用toJson()
方法。
return $validator->messages()->toJson();
答案 1 :(得分:16)
这是让你在响应中添加HTTP代码的另一种方法:
return Response::json($validation->messages(), 500);
答案 2 :(得分:11)
我发现可以使用 toArray()方法:
return json_encode($validation->messages()->toArray());
答案 3 :(得分:2)
我认为这是Laravel获取错误消息的方法。有特殊方法可以获得它们。所以我在这里做了这些事情:
return Response::json($validator->errors()->getMessages(), 400);
以下列格式生成输出:
{
"field_name": [
"Error message"
]
}