在 laravel 中以 json 数据的形式从验证器发出响应

Posted

技术标签:

【中文标题】在 laravel 中以 json 数据的形式从验证器发出响应【英文标题】:raises a response from the validator in the form of json data in laravel 【发布时间】:2020-03-25 12:59:06 【问题描述】:

我有一个生成 json 的控制器,如果错误消息也变成 json,我如何从验证器获取错误消息,

$this->validate($request,[
        'product_type' => 'required',
        'product_name' => 'required|string',
        'qty' => 'required',
    ]);
 -- code for saving process here --

 return response()->json([
            'status' => 'success',
            'msg'  => 'data succesfuly added'
        ]);

这是我在网络预览中的回归

errors: product_type: ["The Product Type name field is required."], product_name: ["The address field is required."],…
product_name: ["The product_name field is required."]
0: "The address field is required."
qty: ["The qty field is required."]
0: "The qty field is required."

我尝试使用 ajax 但没用

success: function(response) 
                Object.keys(response.errors)
                            .forEach(function eachKey(key) 
                            createAlert(response.errors[key], "danger");
                            );            
                    

【问题讨论】:

【参考方案1】:
$validator = Validator::make($request->all(), [
        'product_type' => 'required',
        'product_name' => 'required|string',
        'qty' => 'required',
]);
if ($validator->fails()) 

    //pass validator errors as errors object for ajax response
     return response()->json(['errors'=>$validator->errors()]);

您可以使用$validator->messages()$validator->errors() 返回一个array,其中包含有关validator 的所有信息,包括错误。 json 函数接受 array 并将其编码为 json 字符串。

所以在客户端你可以通过以下方式获取错误对象:

$.ajax().done(function(response)
    //check if response has errors object
    if(response.errors)

    // do what you want with errors, 

    
);

【讨论】:

hay karan,为什么我发现错误“消息”:“找不到类 'App\\Http\\Controllers\\Vendor\\Validator'”, 添加 use Illuminate\Support\Facades\Validator;use Validator;

以上是关于在 laravel 中以 json 数据的形式从验证器发出响应的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中以json值返回视图

如何在 laravel 中以编辑形式显示时间戳格式?

在 PHP / Laravel 中以抽象的方式包装 JSON 响应

DB::table Select() 以字符串形式返回数组 Laravel

在变量中有一个 Json 数据,并希望在 asp.net 中以表格形式显示该数据

在laravel 5.2中以编辑形式进行图像验证