2

我刚刚开始使用 CodeIgniter 的一个小页面,并想运行 CodeIgniter 的表单验证魔术。为此,我通过以下方式设置了一些规则config/form_validation.php

$config = array(
    array(
        'field'   => 'name',
        'label'   => 'Name',
        'rules'   => 'trim|required|max_length[64]'
    )
);

但除此之外,我还想在控制器内部设置一些特定的规则。

$this->form_validation->set_rules('name', 'Name', ' is_unique[table.name]');

我的问题 - 具体set_rules()似乎已经重置了所有先前定义的规则。

有没有办法合并两组规则?还是我错过了一种方法?

4

3 回答 3

2

我之前遇到过这个确切的问题 - 我想使用一组规则,但为特定控制器添加一个额外的规则。

不幸的是,您是正确的 - form_validation 将覆盖旧规则。您甚至不能从配置中调用包含旧规则的变量 - 因为它没有以可访问的格式存储。

我进行锻炼的方法是将通用配置文件中的规则定义为数组 - 并将数组加载到控制器中,然后附加一个新规则,然后将整个数组设置为规则集。

另一种选择是在配置文件中定义两个不同的规则集(即使它们可能几乎相同) - 并根据需要调用不同的规则集。

于 2012-07-15T06:20:59.677 回答
1

最好在每个控制器的配置文件中定义命名数组,并按照 Codeginiter 用户指南中的说明使用它。

$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->run('signup') 。

于 2012-07-14T16:38:12.260 回答
0

我不能说我在 CI 方面有很多经验,但据我所知,你应该能够附加额外的规则。失败考虑尝试:

$config[] = array('name', 'Name', ' is_unique[erfolge.name]');
$this->form_validation->set_rules($config);

或者array_merge如果您不想修改标准配置,请使用。

于 2012-07-14T15:54:37.023 回答