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

问题描述 投票:0回答: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() 方法时,它确实添加并显示错误。

我做错了什么,使用一组规则输入无效的表单数据时没有添加错误消息?

php forms codeigniter validation
4个回答
1
投票

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

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

因此,您将无法创建两组规则,然后一组接着一组地调用。您可以致电其中一个或另一个。

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


0
投票

在 form_validation 数组中尝试 array_merge。

这里如果你想要两个数组组合并且gat连接验证错误。你可以用这个

$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
投票

嘿阿尔文,您需要在提交表单之前运行 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');

            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.