上周刚开始使用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_Validation.php之后,我发现matches
会接受我放在matches
的方括号之间的任何字符串,并尝试从{{1}获取值直接。
CI代码:
$_POST
因此,没有/**
* 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;
}
这样的东西。
我知道我可以使用
来解决这个问题我不确定我缺少什么,因为与表格相关的CI中的所有内容都与数组很好地协作,为什么这个功能不起作用?
答案 0 :(得分:1)
是的,我有一个类似的问题,CI核心输入无法解决这个问题,我解决了我的不是通过创建自定义回调函数,它经常使控制器混乱,而是通过扩展Form_validation
类 MY_Form_validation 强>
然后我创建了一个我称之为matches_array
的函数,然后用作
matches_array[inputkeyname---inputkeyvalue]
os你会把你写成
$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
}
答案 1 :(得分:0)
您可以编辑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;
}