用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3114|回复: 5
收起左侧

CI验证类回调函数的问题

[复制链接]
发表于 2008-12-17 14:04:20 | 显示全部楼层 |阅读模式
$rules  = array(   
    'task_end_time'     => 'trim|required|exact_length[13]|callback_time_check',
);
$this->validation->set_rules($rules);
$this->validation->run();

function time_check($str) {
    return preg_match("/^([0-9\*\s])+$/", $str) ? true : false;
}
上面的验证毁掉函数为何总不成功?

[ 本帖最后由 downblast 于 2008-12-17 14:13 编辑 ]
发表于 2008-12-17 15:03:18 | 显示全部楼层
你是在控制器中,还是在模型中?如果是在模型中,原始的验证类无法实现。
 楼主| 发表于 2008-12-17 15:13:43 | 显示全部楼层
谢谢Hex的回答
model中无法调用验证类回调函数,最后通过扩展CI_validation类添加该函数搞定
发表于 2008-12-17 15:24:52 | 显示全部楼层
模型中不能使用回调函数的参考解决办法
1.回调函数写在调用该模型的控制器里
2.把模型的实例传给验证类;
Validation.php
185 行    增加参数
function run(& source = NULL)
285行 左右 更换如下代码
if ( ! method_exists($this->CI, $rule) )
                    {         
                        continue;
                    }
   $result = $this->CI->$rule($_POST[$field], $param);   

if ( method_exists($this->CI, $rule) ) {
                        $result = $this->CI->$rule($_POST[$field], $param);   
                    } else if ( !is_null($source) &&  method_exists($source, $rule)) ) {
                        $result = $source->$rule($_POST[$field], $param);   
                    } else
                    {
                        continue;
                    }
使用时
$this->validation->run($this);

[ 本帖最后由 alertger 于 2008-12-17 18:13 编辑 ]
发表于 2009-1-3 18:50:50 | 显示全部楼层
可是我在控制器里为什么也不能调用呢?
PHP复制代码
        function save() {
                $this->load->library('validation');
 
                $rules['username'] = "callback_username_check";
                $rules['password'] = "required|matches[passconf]";
                $rules['passconf'] = "required";
 
                $fields['username'] = '用户名';
                $fields['password'] = '密码';
                $fields['passconf'] = '确认密码';
 
                $this->validation->set_rules($rules);
                $this->validation->set_fields($fields);
                $this->validation->set_error_delimiters('<div style="color:red">', '</div>');
 
                if ($this->validation->run() == false)
                {
                        $this->load->view('register');
                }
                else
                {
                        echo '注册成功';
                }
        }
 
        function username_check($username) {
                $this->validation->set_message('username_check', '%s 已被注册');
                return false;
        }
复制代码

[ 本帖最后由 challenger 于 2009-1-3 18:52 编辑 ]
发表于 2009-1-3 18:55:37 | 显示全部楼层
不知道为什么改成这样可以了?
PHP复制代码
 
$rules['username'] = "required|callback_username_check";
 
复制代码

本版积分规则