簡體   English   中英

將 Laravel 驗證消息點語法轉換為數組

[英]Converting Laravel validation message dot syntax into array

我在服務器端使用 Laravel。 假設我們的控制器接收到兩個字段url [string] 和data [array with index 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"]
    }
}

在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
}

Laravel 有一個名為array_set的助手,可以將基於點的符號轉換為數組。

我不知道你是如何通過 ajax 發送錯誤的,但你應該可以這樣做:

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

編輯:但顯然,您應該無法通過 在語言文件中指定自定義消息來使用點符號,如下例所示:

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

我不知道這是否仍然是一個有效問題,但要在 laravel 中使用點符號創建自定義驗證,您可以在 validation.php 中指定這樣的數組

'custom' => [
        'parent' => [
            'children' => [
                'required' => 'custom message here'
            ]
        ]

這將是parent.children屬性。

再見。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM