合并CodeIgniter表单验证规则

时间:2012-07-14 15:47:49

标签: codeigniter validation merge

我刚刚使用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()似乎重置了之前定义的所有规则。

有没有办法合并这两套规则?或者我错过了一种方法吗?

3 个答案:

答案 0 :(得分:2)

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

不幸的是你是对的 - 而form_validation将覆盖旧的规则。你甚至无法从配置中调用包含旧规则的变量 - 因为它没有以可访问的格式存储。

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

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

答案 1 :(得分: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'),其名称为数组。

答案 2 :(得分:0)

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

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

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