将Laravel验证消息点语法转换为数组

时间:2017-07-13 19:45:41

标签: php laravel laravel-5

我在服务器端使用Laravel。让我们假设我们的控制器收到两个字段url [string]和data [索引为head的数组]。我们可以使用

验证数据并自定义错误消息
$this->validate($request, [

    'url' => 'required',
    'data.head' => 'required',

], [

    'url.required' => 'The :attribute field is required',
    'data.head.required' => 'The :attribute field is required',
]);

如果验证失败,Laravel将使用json数据发回回复

{
    "url": ["The url field is required"],
    "data.head": ["The data.head field is required"]
}

我们如何将响应数据转换为发送json,如下所示?

{
    "url": ["The url field is required"],
    "data": {
        "head": ["The data.head field is required"]
    }
}

3 个答案:

答案 0 :(得分:1)

Laravel有一个名为array_set的助手,它将基于点的表示法转换为数组。

我不知道你是如何通过ajax发送错误的,但你应该能够做到这样的事情:

$errors = [];
foreach ($validator->errors()->all() as $key => $value) {
  array_set($errors, $key, $value);
}

编辑: 但显然,您应该不能像Specifying Custom Messages In Language Files那样使用点符号,例如:

'custom' => [
    'email' => [
        'required' => 'We need to know your e-mail address!',
    ],
],

答案 1 :(得分:0)

在javascript中

循环错误

error: function (errors) {
    $.each(errors['responseJSON']['errors'], function (index, error) {
        var object = {};
        element = dotToArray(index);
        object[index] = error[0];
        validator.showErrors(object);
    });
}

将点表示法转换为数组表示法。即 abc.1.xyz到abc [1] [xyz]

function dotToArray(str) {
    var output = '';
    var chucks = str.split('.');
    if(chucks.length > 1){
        for(i = 0; i < chucks.length; i++){
            if(i == 0){
                output = chucks[i];
            }else{
                output += '['+chucks[i]+']';
            }
        }
    }else{
        output = chucks[0];
    }

    return output
}

答案 2 :(得分:0)

key = key.replace(/\./g, '[') + Array(key.split('.').length).join(']');