我刚刚使用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()
似乎重置了之前定义的所有规则。
有没有办法合并这两套规则?或者我错过了一种方法吗?
答案 0 :(得分:2)
我以前遇到过这个问题 - 我想使用一组规则,但为特定控制器添加一条额外的规则。
不幸的是你是对的 - 而form_validation将覆盖旧的规则。你甚至无法从配置中调用包含旧规则的变量 - 因为它没有以可访问的格式存储。
我进行锻炼的方法是将通用配置文件中的规则定义为数组 - 并在控制器中加载数组,然后附加新规则,然后将整个数组设置为规则集。
另一种选择是在配置文件中定义两个不同的规则集(即使它们可能几乎相同) - 只需根据需要调用不同的规则集。
答案 1 :(得分:1)
最好在配置文件中为每个控制器定义命名数组,并按照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'),其名称为数组。
答案 2 :(得分:0)
我不能说我对CI有很多经验,但据我所知,你应该能够附加额外的规则。没有考虑尝试:
$config[] = array('name', 'Name', ' is_unique[erfolge.name]');
$this->form_validation->set_rules($config);
或如果您不想修改标准配置,请使用array_merge
。