|
使用表单验证类中的matches 进行数据是否匹配验证时(假设存在$_POST['A'] = ‘a’,$_POST['B'] = ‘a’)
如果只对数据A进行了set_rules
$this->form_validation->set_rules('A', 'A',
'trim|htmlspecialchars|required|matches[B]',
array(
'matches' => "Fail to match!"
));而没有对数据B进行该操作,则会返回匹配失败,输出‘Fail to match’的错误信息
经过单步调试,发现CI 在 使用 matches 做验证时,使用了_field_data,而这个变量只有set_rules之后这个变量才会有与键相关联的值
对于上述假设,在_field_data中存在_field_data['A'] = a,
而不是把_POST数组(或者_GET数组)整个放进去
在matches的时候它会做如下检查
public function matches($str, $field)
{
return isset($this->_field_data[$field], $this->_field_data[$field]['postdata'])
? ($str === $this->_field_data[$field]['postdata'])
: FALSE;
}问题就出在这里,如果你没有set_rules,_field_data就没有_field_data[‘B’],自然就通不过检查,所以就返回了fals
不明为什么要做这样的设计?如此一来 matches 的使用就变得复杂了,对某些不需要对$_POST['B']设置验证规则的情况,容易出现莫名的错误,而且难以查证
|
|