上周刚开始使用CI,遇到了这个问题。如果我将表单数据作为数组传递,该在matches
函数中放入什么?
我在html表单中使用数组来定位单个数组内的所有输入字段,以防我想传递用户生成的输入,如多个电话号码或电子邮件。所以所有东西都放在数组中,比如:
<div>
<label for="password">Password</label>
<input type="password" name="input[password]" id="password" value="<?php echo set_value("input[password]")?>"/>
</div>
<div>
<label for="password">Confirm Password</label>
<input type="password" name="input[conf_password]" id="conf_password" value="<?php echo set_value("input[conf_password]")?>"/>
</div>
注意*name="input[password]"*
验证工作就像一个魅力,除了当我使用函数matches
:
$this->form_validation->set_rules("input[password]", "Password", 'required|matches[input[conf_password]]');
$this->form_validation->set_rules("input[conf_password]", "Confirm Password", 'required');
matches[input[conf_password]]
这将不起作用,因为在我检查了form_validate .php之后,我发现matches
将采取我放在matches
的方括号之间的任何字符串,并试图直接从$_POST
获取值。
CI代码:
/**
* Match one field to another
*
* @access public
* @param string
* @param field
* @return bool
*/
public function matches($str, $field)
{
if ( ! isset($_POST[$field]))
{
return FALSE;
}
$field = $_POST[$field];
return ($str !== $field) ? FALSE : TRUE;
}
所以应该没有$_POST[input[conf_password]]
这样的东西。
我知道我可以使用
来解决这个问题- 自定义验证函数
- 比较直接$ _POST["输入"]["密码"]= = = $ _POST["输入")("conf_password")
我不确定我错过了什么,因为一切在CI相关的形式是很好地与数组工作,为什么不这个函数?
是的,我有一个类似的问题,没有办法CI核心输入可以解决这个问题,我解决了我的不是通过创建一个自定义回调函数,它经常使控制器混乱,而是通过扩展Form_validation
类MY_Form_validation
,然后我创建了一个函数,我称之为matches_array
,然后用作matches_array[inputkeyname---inputkeyvalue]
那么你就写成
$this>form_validation>set_rules("input[password]","Password",'required|matches_array[input---conf_password]');
这是我记得的函数。
public function matches_array($str, $field)
{
$field = explode('---',$field);
if ( ! isset($theField = $_POST [$field[0] ][ $field[1] ]))
{
return FALSE;
}
return ($str !== $theField) ? FALSE : TRUE;
}
编辑
把它放在你的app/libraries
上,命名为MY_Form_validation
, MY_
是你在配置中定义的。你在这里输入的任何东西都会自动添加到rules
.
class MY_Form_validation extends CI_Form_validation
{
public function __construct($rules = array())
{
parent::__construct($rules);
$this->CI->lang->load('MY_form_validation');
}
//your custom functions
}
可以编辑MY_Form_validation
public function matches($str, $field)
{
return isset($this->_field_data[$field], $this->_field_data[$field]['postdata'])
? ($str === $this->_field_data[$field]['postdata'])
: FALSE;
}