【问题标题】:Merge CodeIgniter form validation rules合并 CodeIgniter 表单验证规则
【发布时间】:2012-07-14 15:47:49
【问题描述】:

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

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

【问题讨论】:

    标签: codeigniter validation merge


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这是我一直面临的确切问题,但只是为了附加规则,我必须创建一个看起来很奇怪的新组,但我认为这是唯一的方法,我什至尝试合并两个组并没有成功访问stackoverflow.com/questions/29789238/…
    【解决方案2】:

    最好在每个控制器的配置文件中定义命名数组,并按照 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')。

    【讨论】:

    • 是的,在我提出问题后,我想到了这个解决方案。它应该可以解决我的问题,但我想在每个控制器上指定一个附加规则的原因是因为这个配置中的几乎每个命名数组看起来都一样,除了这个 is_unique 语句:)
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      相关资源
      最近更新 更多