CodeIgniter自动加载表单验证规则设置不使用参数

时间:2013-07-10 11:02:46

标签: forms codeigniter validation

在CI user_guide之后,我创建了一个名为“form_validation.php”的配置文件,其中包含以下几组:

$config = array(
'user/create' => array(
    array(
        'field' => 'id', 
        'label' => '', 
        'rules' => ''
    ),
    array(
        'field' => 'first_name',
        'label' => 'lang:First name', 
        'rules' => 'required|max_length[30]'
    ),...        
),
'user/update' => array(
    array(
        'field' => 'id', 
        'label' => '', 
        'rules' => ''
    ),
    array(
        'field' => 'first_name',
        'label' => 'lang:First name', 
        'rules' => 'required|max_length[30]'
    ),...
)
);

在我的'用户'控制器中,当我调用'create'方法,因此使用URL http://localhost/my_ci_application/user/create时,语句$this->form_validation->run()会自动运行我的配置文件中定义的第一组规则。这是我在用户指南中阅读的预期行为。

但是,当我运行以下URL http://localhost/my_ci_application/user/update/1来更新ID为1的用户时,它不会自动加载“用户/更新”规则集。看起来因为参数,CI期望找到'user / update / 1'规则集,当然我无法创建,因为我的用户ID在调用此方法时会一直变化。

我理解这是对的吗?如果是的话,那可惜我认为标准的CI URL形成如下:controller / method / parameters ...所以我希望表单验证类只考虑前两个URI段?!

仅供参考,如果我用以下的user.update方法编写,我的验证规则可以正常工作:

$this->form_validation->run('user/update')

所以我的问题是,如果我理解正确或不正确的自动加载规则,并且即使使用具有某些参数的方法,我们还能做些什么来自动加载这些规则。

非常感谢你。

3 个答案:

答案 0 :(得分:1)

在form_validation.php文件中:

$CI =& get_instance();

$config = array(
    'user/update/' . $CI->uri->segment(3) => array(
    ....
    )
);

答案 1 :(得分:0)

如果我理解这个问题你将需要呼叫验证,例如:

$this->lang->load('form_validation', 'portuguese'); //if u have order language
if($this->form_validation->run('user/update') == FALSE)
{
//msg error
}
else{
//save
}

要获取您需要的网址标尺的值:

$this->uri->segment(3);

我希望这有帮助

答案 2 :(得分:0)

您可以扩展库以实现此目的

application/libraries/MY_Form_validation.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Form_validation extends CI_Form_validation {

    function run($group = '')
    {
        if($group == '')
        {
            $group = '/' . implode('/', array_slice($this->CI->uri->rsegment_array(), 0, 2));
        }

        return parent::run($group);
    }

}