【问题标题】:Codeigniter form validation $_POST nested fieldsCodeigniter 表单验证 $_POST 嵌套字段
【发布时间】:2012-11-14 00:12:21
【问题描述】:

我需要通过 AJAX 调用在 codeigniter 中设置表单验证规则 该调用会生成一个 $_POST 数组,我在其中嵌套来自不同表单 (1:N) 的数据,然后我以这种方式设置验证规则:

$this->form_validation->set_rules($field, $label , $rules);

$_POST 数组在此类似:

field1: value1
field2: value2
field3: value3
field4: value4
field5: value5
field6: value6      
id: 86
operation: "add"

显然,某些表单可能有冲突的名称,这种解决方案并不可靠。

例如

field1:value1
field1:value2

名字是动态给出的,所以我不能更改它们。

我选择将值嵌套在 $_POST 数组中:

form: 
    form1: 
           field1: value1
           field2: value2
    form2: 
           field1: value3
           field2: value4
    form3: 
           field1: value5
           field2: value6
id: 86
operation: "add"

但现在 form_validation 已损坏。

    $this->form_validation->set_rules('form[form1['.fieldN .']', $label   , $rules);

没有按预期工作:我无法验证。查看 Form_validation.php 库,set_rules 第一个参数是一个字符串,它的值可以是一个数组,但我不能更深入地嵌套,例如数组数组。 有办法做到这一点吗?有什么提示吗?

【问题讨论】:

    标签: validation codeigniter


    【解决方案1】:

    您可以像这样将数组作为字段名称传递

    $this->form_validation->set_rules('options[]', 'Options', 'required');
    

    请参考 details documentation 在 Codeigniter 的验证类中使用数组。

    【讨论】:

    • $this->form_validation->set_rules('form[form_name]', 'try' , 'required');工作,但我需要添加另一个嵌套级别,它不再工作了。
    • 是的。我恢复到 2 级并且运行良好。
    【解决方案2】:

    您可以查看此链接以了解 reference 如何使用单个数组为所有字段设置规则。

    您可以像这样在嵌套数组中为同一数组中的不同表单设置规则。

    $config['login_form'] = array (
                            array 
                            (
                                'key' => 'email', 
                                'value' => 'Email',
                                'rule' => 'trim|required|valid_email|xss_clean'
                            ),
                            array
                            (
                                'key' => 'passwd', 
                                'value' => 'Password',
                                'rule' => 'trim|required|alpha_numeric|xss_clean'
                            )
                          );
     $config['login_form_error_code_1'] = 'The email or password you entered is incorrect';                       
    
     $config['add_user_form'] = array(
                                array(
                                        'key' => 'user_email',
                                        'value' => ' User Email',
                                        'rule' => 'trim|required|valid_email|callback_duplicate_user_email_check|xss_clean'
                                        ),
                                array(
                                        'key' => 'user_name',
                                        'value' => 'User Name',
                                        'rule' => 'trim|required|xss_clean'
                                         ),
                                array(
                                        'key' => 'user_phone',
                                        'value'=> 'Mobile',
                                        'rule' => 'trim|required|integer|min_length[10]|max_length[10]|xss_clean'
                                        ),
                                array
                                (
                                        'key' => 'user_password',
                                        'value' => 'Password',
                                        'rule' => 'trim|required|min_length[8]|alpha_numeric|xss_clean'
                                )
    
    
        );
    

    现在你所有的规则都在同一个数组 $config 中。

    【讨论】:

    • 已经看过了。据我了解,它只是说我可以将相同的规则集分配给固定的字段集(例如复选框)。我有动态字段名称和动态规则,我的问题是将 $_POST[form[formname[fieldname]]] 绑定到正确的 set_rules(fieldname, label, rules)
    • 你想把所有规则放在一个数组中以适应不同的形式
    • $this->form_validation->set_rules('form[form_name]', 'try' , 'required');工作,但我需要添加另一个嵌套级别,它不再工作了。
    • 抱歉,是嵌套级别问题,而不是填充问题;)
    • 我刚刚从三个嵌套级别恢复到两个嵌套级别,它可以工作。 form_validation 库似乎最多接受 2 个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 2011-01-29
    • 2016-01-04
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 2018-10-10
    相关资源
    最近更新 更多