在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')
所以我的问题是,如果我理解正确或不正确的自动加载规则,并且即使使用具有某些参数的方法,我们还能做些什么来自动加载这些规则。
非常感谢你。
答案 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);
}
}