[英]Codeigniter Extend Form_validation not work with callback function
[英]Codeigniter form_validation callback function issue
我的代码如下:
class Test_model extends MY_Model
{
public $validation_rules = [
'field' => 'input_text',
'label' => 'Your Text',
'rules' => 'trim|callback_checkString',
'errors' => [
'checkString' => 'Invalid String',
]
];
public function checkString($x){
return $x==='valid';
}
/* callback function */
public function do_my_job(){
/*form_validation is already loaded in autoload.php*/
$this->form_validation->set_rules($this->validation_rules);
if($this->form_validation->run()){
/*do something*/
}else show_404();
}
}
当我调用$ this-> Test_model-> do_my_job()时,所有其他验证有效,但回调函数不起作用....它总是抛出我的自定义错误“无效字符串” !!! ...
任何解决方案?
您需要为自定义规则定义一条错误消息。 在您的情况下,将消息添加到$validation_rules
会非常容易。
public $validation_rules = [
'field' => 'input_text',
'label' => 'Your Text',
'rules' => 'trim|callback_checkString',
'errors' => ['checkString' => '{field} text is not valid'],
];
另一种选择是在set_rules
之后立即使用set_message
方法。
$this->form_validation
->set_rules($this->validation_rules)
->set_message('checkString', '{field} text is not valid');
下一点不会回答您的问题,但是请考虑checkString
这种变化。
public function checkString($x)
{
return $x==='valid'; //this will evaluate to a boolean, if/else not required
}
第2部分
有效输入未得到验证的问题是由于在何处定义了回调函数。 Form_validation希望验证方法在控制器中。 (从技术上讲,它实际上是在CI
“超级对象”中查找该方法,而该对象是控制器。)将回调定义移至控制器应该可以解决所有问题。
第三部分
如果要使整个网站都可以使用自定义验证程序并使代码保持DRY,最简单的方法是扩展CI_Form_validation
。 比您想像的要容易。
创建文件application/libraries/MY_Form_validation.php
这是代码
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation
{
public function __construct($rules = array())
{
parent :: __construct($rules);
}
//Add any custom validation methods.
public function checkString($x)
{
return $x === 'valid';
}
}
DONE!
加载表单验证的方式与以往完全相同,并且使用新方法的方式与使用CI随附的规则的方式相同。 您不使用callback_
前缀。
现在,这就是在模型中设置新规则的方式。
public $validation_rules = [
'field' => 'input_text',
'label' => 'Your Text',
'rules' => 'trim|checkString',
'errors' => [
'checkString' => 'Invalid String',
]
];
do_my_job()
方法不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.