Forms CodeIgniter自动加载表单验证规则集无法使用参数
根据CI user_指南,我创建了一个名为“form_validation.php”的配置文件,其中包含以下集合: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',
$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]'
),...
)
);
在我的“用户”控制器中,当我调用“创建”方法时,因此使用URLhttp://localhost/my_ci_application/user/create
,语句$this->form\u validation->run()
自动运行配置文件中定义的第一组规则。这是我在《用户指南》中看到的预期行为
但是当我运行以下URLhttp://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()”而不传递任何内容。不过还是谢谢你。