繁体   English   中英

Codeigniter form_validation回调函数问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM