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

[已解决] 表单验证【回调】的问题

[复制链接]
发表于 2011-5-20 10:41:20 | 显示全部楼层 |阅读模式
本帖最后由 rockey329 于 2011-5-20 11:53 编辑

原帖:【解决方法见后!
是不是只能在控制器里才有效?自定义类或者MODEL里都无效?如果我需要在多个控制器里调用该怎么实现?

PHP复制代码
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Formcheck{
 
function note_check(){
 
$CI =& get_instance();//调用Ci
 
$CI->form_validation->set_message('required', '%s 不能为空');
 
$CI->form_validation->set_rules('captcha', '验证码', 'required|callback_check_captcha');
 
}
 
function check_captcha($str){
 
$CI =& get_instance();//调用Ci
 
$captcha = $CI->session->userdata('captcha_word');
 
if($str !== $captcha){
 
$CI->form_validation->set_message('check_captcha', '%s 不等于 '.$captcha);
   
return FALSE;
 
}else{
 
$CI->form_validation->set_message('check_captcha', '%s 等于 '.$captcha);
 
return FALSE;
 
}
 
}
}
 
复制代码



如果用在控制器里是有效的,但是在这个类里无效~~求解~请高手指点

===============================================
问题已经解决,可以通过扩展Form_validation类库实现

举例:

PHP复制代码
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//扩展验证类
class MY_Form_validation extends CI_Form_validation{
 
 
 
function __construct()
    {
        parent::__construct();
    }
 
 
 
function captcha($str) {
 
$CI =& get_instance();
 
$captcha = $CI->session->userdata('captcha_word');
 
 
 
if($str !== $captcha){
 
$CI->form_validation->set_message('captcha', '%s 错误 ');
   
return FALSE;
 
}else{
 
return TRUE;
 
}
 
}
}
 
复制代码



然后 $CI->form_validation->set_rules('captcha', '验证码', 'required|captcha');就可以了


发表于 2011-5-20 11:04:53 | 显示全部楼层
在C层写个方法,方法里面调取你自定义类的check方法
回调方法就调你C写的方法
貌似是因为callback_(只能接方法名称)
但是自定义类的引用必须是$this->类名->方法,如果这样接在callback后面就无效了吧.
不是很清楚,一般这种callback我都直接写在控制器里的,你试试看吧
 楼主| 发表于 2011-5-20 11:06:44 | 显示全部楼层
回复 zhouli520 的帖子

我想也是callback的问题,控制器里是ok的,我主要想在多个控制器里调,不想重复写代码
发表于 2011-5-20 11:10:22 | 显示全部楼层
你就试试在控制器里写个调取自定义类的方法,callback你控制器里的这个中间方法试试?
 楼主| 发表于 2011-5-20 11:47:41 | 显示全部楼层
回复 zhouli520 的帖子

解决了,扩展了Form_validation类库
发表于 2011-11-8 15:25:26 | 显示全部楼层
本帖最后由 烟头上的探戈 于 2011-11-8 15:25 编辑

关于 Model 调用为什么失效可以看这里。
http://blog.csdn.net/treesky/article/details/6948077
发表于 2011-11-30 11:05:25 | 显示全部楼层
mark.

本版积分规则