【问题标题】:Return validation error message as JSON - Laravel 6以 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%。实际上,我在日志中根本没有收到任何错误。

标签: php laravel validation error-handling laravel-6


【解决方案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
    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2015-11-20
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多