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

4 回答 4

1

$config 数组需要位于 application/config 目录中名为 form_validation.php 的文件中。然后在加载 CI 时自动加载,并在创建时传递给 Form 验证对象。

第一次调用 FV 对象的 run() 方法时,如果 FV 对象中没有设置规则,它会查找在创建时给出的配置规则,并使用由作为参数传递的名称索引的组跑()。在 CI 应用程序的同一次调用中,所有后来对 run() 的调用,即使使用不同的组名,也将绕过此检查,因为现在已经设置了规则 - 即,您只能在调用中设置一次规则组。

因此,您将无法创建两组规则,然后依次调用。您可以拨打一个或另一个。

使用 set_rule() 级联规则可能会更好 - 即,使用 set_rule() 添加一些规则,然后针对它们进行验证。如果它们通过,添加更多规则并重试验证。你有效地重复旧规则,知道它们会通过,但这意味着任何失败都将是新规则的结果。

于 2012-12-19T12:05:43.797 回答
0

在 form_validation 数组中尝试 array_merge。

这里如果你想要两个数组组合和gat join 验证错误。你可以用这个

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

希望这有帮助。

于 2017-01-18T05:54:20.370 回答
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);

注意:先设置数据再设置规则,反之不行!

于 2017-03-18T06:37:35.543 回答
-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');

            }
        }
于 2015-10-08T10:10:00.310 回答