【问题标题】:Codeigniter callback failureCodeigniter 回调失败
【发布时间】:2011-05-06 03:45:09
【问题描述】:

谁能看到我错过了什么?

我正在使用 Codeigniter v1.72。

在文档中:

http://codeigniter.com/user_guide/libraries/form_validation.html

上面写着:

$this->form_validation->set_rules('username', 'Username', 'callback_username_check');

function username_check($str)
    {
        if ($str == 'test')
        {
            $this->form_validation->set_message('username_check', 'The %s field can not be the word "test"');
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }

在我的班级用户扩展控制器

我在函数寄存器中:

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callback_username_check('.$username.')');

I have also tried 

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callback_username_check');

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callback_username_check['.$username.']');


    function username_check($str)
    {
            $this->load->model('User_model', '', TRUE);
            $taken = $this->User_model->countUsername($str);

            if($taken)
            {
                $this->form_validation->set_message('username_check', 'That username is already taken');
                return FALSE;
            }
            else
                return TRUE;
    }

根本没有错误,我的方法都不起作用,代码的行为就像它不存在一样。

【问题讨论】:

  • 我看不到在哪里可以给这个函数添加回调。
  • @helle:该函数是一个回调。如果您阅读他引用的网页,您会看到callback_username_checkusername_check 设置为回调。

标签: php codeigniter callback


【解决方案1】:

首先,我假设您的其余代码是正确的。显示整个 User 类可能会有所帮助。

您可能想检查 CodeIgniter 是否允许您在同一规则中调用回调函数和准备/验证器函数。如果不允许,您可以在回调函数中调用trimrequirexss_clean

不过,我会说,如果允许,那么这绝对是 RIGHT 形式:

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callback_username_check');

这是错误

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callback_username_check['.$username.']');

这也是错误的

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callback_username_check('.$username.')');

看,在那一行中,您实际上不应该 CALLING 函数。相反,您将一个字符串传递给 set_rules() 函数,它将解析并找出您想要用作回调的函数。

正如文档所述,无论username 的值是什么,都将作为参数传递给您的回调函数。

编辑:

我想说试试这个:

$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|callback_username_check');

但我认为它不会起作用。相反,这应该有效:

function username_check($str)
    {
        $this->load->model('User_model', '', TRUE);
        $taken = $this->User_model->countUsername($str);

        if($taken)
        {
            $this->form_validation->set_message('username_check', 'That username is already taken');
            return FALSE;
        }
        else if(!$str) {
            // This is functioning as the required rule
            return FALSE;
        }
        else {
            $str = trim($str);
            $str = $this->input->xss_clean($str);
            return $str;
        }
}

【讨论】:

  • 谢谢!!!这确实有效: $this->form_validation->set_rules('username', 'Username', 'callback_username_check');但现在我不能调用 trim、require 和 xss_clean。知道如何完成这项工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多