dongleman4760
2014-07-25 12:37
浏览 39
已采纳

codeigniter - 自定义验证

This is my extended class for form_validation:

<?php
class MY_Form_validation extends CI_Form_validation
{
    function __construct($config = array()) {
         parent::__construct($config);
    }
    function count_errors(){
        if (count($this->_error_array) === 0){
            return 0;
        }
        else
            return count($this->_error_array);
    }

    public function max_number($num, $val) {
        if($num > $val){
            $this->set_message("max_number", "The %s can not be greater then "  . $val);
            return false;
        }
    }

    public function min_number($num, $val) {
        if($num < $val){
            $this->set_message("min_number", "The %s can not be smaller then "  . $num);
            return false;
        }
    }

    public function error_array(){
        return $this->_error_array;
    }
}

And then in controller I set up rule like this for example "num" field:

$this->form_validation->set_rules('num', "Number", 'required|numeric|min_number[1]|max_number[99]');

For example 56 passes but also 1903.

But if num field is 0 it works.

So, this is working only for min_num but does not work for max_num.

What I am doing wrong here?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • donglu0494 2014-07-27 13:20
    已采纳

    Codeigniter already has a built-in function for this, greater_than[1] and less_than[99]

    However, to get your functions working you need to return true (well, !== FALSE) i.e.

     public function max_number($num, $val) {
        if($num > $val){
            $this->set_message("max_number", "The %s can not be greater then "  . $val);
            return false;
        }
    
        return true;
    }
    
    public function min_number($num, $val) {
        if($num < $val){
            $this->set_message("min_number", "The %s can not be smaller then "  . $num);
            return false;
        }
    
        return true;
    }
    

    Hope this helps!

    打赏 评论

相关推荐 更多相似问题