首页 > 解决方案 > 无法在 codeigniter 的 MY_Form_validation 中调用自定义验证

问题描述

我在代码点火器中创建了一个自定义验证类。

class MY_Form_validation extends CI_Form_validation {

    function __construct($rules = array()) {
        parent::__construct($rules);
    }

    public function required_fr($str) {
        var_dump('test');
        if (!is_array($str)) {
            return (trim($str) == '') ? FALSE : TRUE;
        } else {
            return (!empty($str));
        }
    }
}

我的控制器如下所示:

class Ticket extends CI_Controller { 

    function __construct() {
        parent::__construct();
        $this->load->library('form_validation');
        $this->form_validation->set_error_delimiters('<div class="alert alert-danger alert-dismissable"><a aria-hidden="true" data-dismiss="alert" class="close" type="button">×</a>', '</div>');            
    }

    public function new_ticket() {
        $this->form_validation->set_rules('category', 'categorie', 'required_fr');
        if ($this->form_validation->run() == TRUE) {
            ...
        }
    }
}

如果我不填写“类别”字段,则不会调用验证“required_fr”。我从来没有从屏幕上的 var_dump 收到消息“测试”。

如果我输入“required”而不是“required_fr”,我会在我的页面中得到绑定到 required 的正确消息。如果我输入 required_fr,我根本不会收到任何消息。

我还尝试在表单验证的 set_rules 函数中添加 callback_ ,但这似乎也不起作用。

如果我在 MY_Form_validation 类的构造函数中放置一个 var_dump,我会看到它在我的页面上弹出,因此自定义验证类被加载。

我错过了什么?

标签: phpcodeignitervalidation

解决方案


尝试代替 $str 使用输入帖子

文件名 application/libraries/MY_Form_validation.php

<?php

class MY_Form_validation extends CI_Form_validation {

protected $CI;

public function __construct() {
    $this->CI =& get_instance();
}

public function required_fr() {
    if (!is_array($this->CI->input->post('your_input_name'))) {

        if (trim($this->CI->input->post('your_input_name')) == '') {
            $this->set_message('required_fr','some message');
            return false;
        } else {
            return true;
        }
    }
}

推荐阅读