以 JSON 形式返回验证错误消息 - Laravel 6
Posted
技术标签:
【中文标题】以 JSON 形式返回验证错误消息 - Laravel 6【英文标题】:Return validation error message as JSON - Laravel 6 【发布时间】:2020-01-23 11:05:02 【问题描述】:我想以 JSON 格式返回失败的验证尝试消息。我以前用过类似的东西,它在 Laravel 5 上工作,我相信......
if ($validator->fails())
return response()->json($validator->messages(), 200);
但是,对于我们的新项目,我们使用的是 Laravel 6,上面的内容只是返回一个空白页面。
在 Laravel 6 中,以下成功返回错误消息,虽然不是在 JSON...
if ($validator->fails())
$msg = $validator->messages();
dd($msg);
response()
在 Laravel 6 中的工作方式必须有所改变。
任何想法如何让验证消息在 Laravel 6 中以 JSON 形式返回?谢谢。
【问题讨论】:
$validator->errors()
应该根据 Validator 合约返回 messageBag 实例,$validator->messages()
在哪个版本的 Laravel 上工作?因为我在合同中看不到该方法。
感谢 Joe,return response()->json($validator->errors(), 200);
在 Laravel 6 中也为我返回了一个空白页面。
您的 apache/laravel 日志是否显示任何错误?看看您进行验证检查的整个方法可能会有所帮助。
感谢 mdexp,100%。实际上,我在日志中根本没有收到任何错误。
我没有看到任何变化laravel.com/docs/6.x/responses#json-responses
【参考方案1】:
这里,
if($validatedData->fails())
return response()->json([
'status' => 'error',
'message' => $validatedData->getMessageBag()
],400);
您可以在 JSON 中获取这些错误,这是示例代码
$.ajax(
url: " route('your_route_name') ",
method: 'post',
cache: false,
contentType: false,
processData: false,
data: formData,
success: function(response)
//....YOUR SUCCESS CODE HERE
,
error: function(response)
// HERE YOU CAN GET ALL THE ERRORS IN JSON
var data = JSON.parse(response.responseText);
if(data.message)
if(data.message.f_name)
$('input[name=f_name]')
.parents('.form-group')
.find('.help-block')
.html(data.message.f_name)
.css('display','block');
else
$('input[name=f_name]')
.parents('.form-group')
.find('.help-block')
.html('')
.css('display','none');
else
$('.help-block').html('').css('display','none');
);
【讨论】:
【参考方案2】:这应该有效
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required',
]);
if ($validator->fails())
$messages = $validator->errors()->all();
$msg = $messages[0];
return response()->json(['success_code' => 401, 'response_code' => 0, 'response_message' => $msg]);
【讨论】:
谢谢。这也为我返回了一个空白页。我认为这个问题与response()
助手有关。我需要做些什么才能让它在 Laravel 6 中工作吗?
@sdexp 在你的控制器中添加Illuminate\Http\Response
。以上是关于以 JSON 形式返回验证错误消息 - Laravel 6的主要内容,如果未能解决你的问题,请参考以下文章