使用一组规则进行Codeigniter表单验证

4

我正在尝试在我的Codeigniter项目中创建一组表单验证规则,以便当第一组验证失败时,第二组验证规则不应运行。

我在CI手册中找到了以下内容:

$config = array(
             'signup' => array(
                                array(
                                        'field' => 'username',
                                        'label' => 'Username',
                                        'rules' => 'required'
                                     ),
                                array(
                                        'field' => 'password',
                                        'label' => 'Password',
                                        'rules' => 'required'
                                     ),
                                array(
                                        'field' => 'passconf',
                                        'label' => 'PasswordConfirmation',
                                        'rules' => 'required'
                                     ),
                                array(
                                        'field' => 'email',
                                        'label' => 'Email',
                                        'rules' => 'required'
                                     )
                                ),
             'email' => array(
                                array(
                                        'field' => 'emailaddress',
                                        'label' => 'EmailAddress',
                                        'rules' => 'required|valid_email'
                                     ),
                                array(
                                        'field' => 'name',
                                        'label' => 'Name',
                                        'rules' => 'required|alpha'
                                     ),
                                array(
                                        'field' => 'title',
                                        'label' => 'Title',
                                        'rules' => 'required'
                                     ),
                                array(
                                        'field' => 'message',
                                        'label' => 'MessageBody',
                                        'rules' => 'required'
                                     )
                                )                          
           );
$this->form_validation->set_rules($config);

我知道我现在可以分别运行每个集合的验证(在这种情况下是 $this->form_validation->run('signup') 和 $this->form_validation->run('email'))。
问题是,当我使用 $config 数组时,错误不会被添加到表单验证类中(因此不会显示出来),而表单提交失败。当我没有使用规则集,而只是使用 $this->form_validation->set_rules() 方法时,它确实添加并显示了错误。
我做错了什么,使得在使用一组规则时输入无效的表单数据时没有添加错误消息?
4个回答

1
$config数组需要在application/config目录下的form_validation.php文件中。当CI被加载时,它会自动加载并传递给创建Form验证对象时使用的配置规则。
第一次调用FV对象的run()方法时,如果在FV对象中没有设置规则,则它会查找在创建时提供的配置规则,并使用以传递的名称为索引的组来运行。在同一次CI应用程序调用中的所有后续对run()的调用,即使使用不同的组名称,也将绕过此检查,因为规则现在已经设置 - 也就是说,在调用中只能设置一次规则组。
因此,您将无法创建两个规则组,然后依次调用它们。您只能调用其中一个。
最好使用set_rule()级联您的规则 - 即使用set_rule()添加一些规则,然后对其进行验证。如果它们通过了,再添加一些规则并重试验证。您有效地重复旧规则,知道它们将通过,但这意味着任何失败都将是新规则的结果。

0

尝试在form_validation数组中使用array_merge。

如果您想要将两个数组合并并获得联合验证错误,可以使用此方法。

$config["form"] = array_merge($config['signup'], $config['email']);

希望这可以帮到你。

0

如果有人遇到同样的问题,请尝试这个:

if ($this->form_validation->run('signup') === FALSE) { /* return your errors */ }

$this->form_validation->reset_validation();
$this->form_validation->set_data($data);
if ($this->form_validation->run('email') === FALSE) { /* return your errors */ }

// Do your stuff 

每次验证后都需要重置以更改规则。您还可以使用:

$this->form_validation->set_rules($validation_rules);

注意:先设置数据,然后再设置规则,反过来行不通!

-1

嘿,Alwin,你需要在提交表单之前运行form_validation规则。

$config = array(
             'signup' => array(
                                array(
                                        'field' => 'username',
                                        'label' => 'Username',
                                        'rules' => 'required'
                                     ),
                                array(
                                        'field' => 'password',
                                        'label' => 'Password',
                                        'rules' => 'required'
                                     ),
                                array(
                                        'field' => 'passconf',
                                        'label' => 'PasswordConfirmation',
                                        'rules' => 'required'
                                     ),
                                array(
                                        'field' => 'email',
                                        'label' => 'Email',
                                        'rules' => 'required'
                                     )
                                ),
             'email' => array(
                                array(
                                        'field' => 'emailaddress',
                                        'label' => 'EmailAddress',
                                        'rules' => 'required|valid_email'
                                     ),
                                array(
                                        'field' => 'name',
                                        'label' => 'Name',
                                        'rules' => 'required|alpha'
                                     ),
                                array(
                                        'field' => 'title',
                                        'label' => 'Title',
                                        'rules' => 'required'
                                     ),
                                array(
                                        'field' => 'message',
                                        'label' => 'MessageBody',
                                        'rules' => 'required'
                                     )
                                )                          
           );


 $this->form_validation->set_rules($config);
    ///u have to chek form validation getting validate or not
   //enter code here


 if ($this->form_validation->run() === FALSE) {
                $this->load->view('your_view');
            } else {$this->ur_controller->method_name();
                $this->load->view('whatever ur view');

            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接