【问题标题】:codeigniter 3 validation of associative array关联数组的codeigniter 3验证
【发布时间】:2016-09-22 19:24:24
【问题描述】:

我正在尝试使用验证库验证从我的 JavaScript 推送的关联数组。

以下代码正在工作,除了它仅验证(查找值)关联数组中的最后一个数组,有没有办法让它在 foreach 中运行时为数组的每个实例工作?

代码:

    if (!empty($JSON)) {
        foreach ($JSON AS $k => $data) {

            foreach ($data AS $key => $value) {
                $this->form_validation->set_data($data);
                if($key == 'itemCode' . $k){
                    $this->form_validation->set_rules($key, 'Item Code', 'required');
                }
                if($key == 'Desc' . $k){
                    $this->form_validation->set_rules($key, 'Description', 'required');
                }
                if($key == 'Qty' . $k){
                    $this->form_validation->set_rules($key, 'Quantity', 'required|numeric');
                }
                if($key == 'Cost' . $k){
                    $this->form_validation->set_rules($key, 'Cost', 'required|numeric');
                }

            }
            //$this->form_validation->reset_validation();

        }
    }

数组输出:

[0] => Array(
    [Counter0] => 0
[itemCode0] => 1
[Desc0] => 1
[Qty0] => 1
[Cost0] => 1
[Total0] => 1
)
[1] => Array(
    [Counter1] => 1
[itemCode1] => 2
[Desc1] => 2
[Qty1] => 2
[Cost1] => 2
[Total1] => 4
)
[2] => Array(
    [Counter2] => 2
[itemCode2] => 3
[Desc2] => 3
[Qty2] => 3
[Cost2] => 3
[Total2] => 9
)
[3] => Array(
    [Counter3] => 3
[itemCode3] => 4
[Desc3] => 4
[Qty3] => 4
[Cost3] => 4
[Total3] => 16
)

【问题讨论】:

    标签: php arrays codeigniter validation


    【解决方案1】:

    问题是,set_data 函数在 set_rules 函数之间被调用并根据 CI

    您必须在定义任何验证规则之前调用 set_data() 方法。

    欲了解更多信息,请查看documentation

    一种可能的方法是捕获数组中的所有数据和规则

    下面是一个如何实现的示例,请记住我没有测试它,因为我在这里写了它,但你应该能够看到这一点

    $arrValidationData = array();
    $arrValidationRules = array();
    
    $arrCatchValidationData = array(
        "itemCode" => array(
            "label" => "Item Code",
            "rules" => "required"
        ),
        "Desc" => array(
            "label" => "Description",
            "rules" => "required"
        ),
        "Qty" => array(
            "label" => "Quantity",
            "rules" => "required|numeric"
        ),
        "Cost" => array(
            "label" => "Cost",
            "rules" => "required|numeric"
        ),
    );
    
    if (!empty($JSON)) {
        foreach ($JSON AS $k => $data) {
    
            foreach ($data AS $key => $value) {
    
                $keyToCatch = str_replace($k, "", $key);
                if (isset($arrCatchValidationData[$keyToCatch]))
                {
                    $arrValidationData[$key] = $value;
                    $arrValidationRules[] = array(
                        "field" => $key,
                        "label" => $arrCatchValidationData[$keyToCatch]['label'],
                        "required" => $arrCatchValidationData[$keyToCatch]['rules']
                    );
                }
            }
            //$this->form_validation->reset_validation();
    
        }
    
        $this->form_validation->set_data($arrValidationData);
        $this->form_validation->set_rules($arrValidationRules);
    
    }
    

    更新:30.05.2016

    根据您的评论,您希望在同一调用中验证 post 和 json 数据,在这种情况下,您只需合并数据

    $arrValidationData = array_merge($arrValidationData, $_POST);
    

    【讨论】:

    • 非常感谢这个概念,我会尝试看看它是否可行或它的变体。
    • 一个微小的变化(输出中的数组值不正确),它工作得很好。非常感谢!!
    • 为表单的验证工作,然而,在发布时,不幸的是,有些东西正在剥离 POST 验证数据,所以修复一个问题,导致另一个问题! :(
    • 不确定你的意思 - 这是你的 json 示例的解决方案 - 如果你需要发布验证数据 - 你只需要注释掉你的 set_data 函数
    • 我正在尝试在同一个调用中验证 POST 数据和 JSON 数组,如果我提交页面 JSON/表数据验证完美,但在提交时它会删除之前的所有 POST 数据...
    猜你喜欢
    • 2018-01-21
    • 2022-01-21
    • 2016-01-20
    • 2017-11-06
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    相关资源
    最近更新 更多