Forms CodeIgniter自动加载表单验证规则集无法使用参数

Forms CodeIgniter自动加载表单验证规则集无法使用参数,forms,codeigniter,validation,Forms,Codeigniter,Validation,根据CI user_指南,我创建了一个名为“form_validation.php”的配置文件,其中包含以下集合: $config = array( 'user/create' => array( array( 'field' => 'id', 'label' => '', 'rules' => '' ), array( 'field' => 'first_name',

根据CI user_指南,我创建了一个名为“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]'
    ),...
)
);
在我的“用户”控制器中,当我调用“创建”方法时,因此使用URL
http://localhost/my_ci_application/user/create
,语句
$this->form\u 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')
所以我的问题是,我是否正确理解规则的自动加载,我们是否可以做些什么来自动加载这些规则,即使方法有一些参数


提前非常感谢。

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

$this->lang->load('form_validation', 'portuguese'); //if u have order language
if($this->form_validation->run('user/update') == FALSE)
{
//msg error
}
else{
//save
}
要获取所需url的值,请执行以下操作:

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

我希望这有助于

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

$this->lang->load('form_validation', 'portuguese'); //if u have order language
if($this->form_validation->run('user/update') == FALSE)
{
//msg error
}
else{
//save
}
要获取所需url的值,请执行以下操作:

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

我希望这对您的form_validation.php文件有所帮助:

$CI=&get_instance();
$config=array(
“user/update/”.$CI->uri->segment(3)=>数组(
....
)
);

在您的表单_validation.php文件中:

$CI=&get_instance();
$config=array(
“user/update/”.$CI->uri->segment(3)=>数组(
....
)
);

您可以扩展库来实现这一点

application/libraries/MY\u Form\u 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);
    }

}

您可以扩展库来实现这一点

application/libraries/MY\u Form\u 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);
    }

}

是的,我确实知道我现在需要自己调用验证规则,通过run()方法传递“user/update”。我的问题是,是否需要在某个地方进行某种配置,以便CI不会自动获取所有URI段,而只自动获取前两个URI段,这样我就可以继续使用“$this->form\u validation->run()”而不传递任何内容。不过还是要谢谢你。是的,我确实知道我现在需要自己调用验证规则,通过run()方法传递“user/update”。我的问题是,是否需要在某个地方进行某种配置,以便CI不会自动获取所有URI段,而只自动获取前两个URI段,这样我就可以继续使用“$this->form\u validation->run()”而不传递任何内容。不过还是谢谢你。