Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter回调失败_Php_Codeigniter_Callback - Fatal编程技术网

Php Codeigniter回调失败

Php Codeigniter回调失败,php,codeigniter,callback,Php,Codeigniter,Callback,有人能看到我遗漏了什么吗 我正在使用Codeigniter v1.72 在文件中: 它说: $this->form_validation->set_规则('username'、'username'、'callback_username_check') 在我的类中,用户扩展控制器 我有一个功能寄存器: $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean', 'callba

有人能看到我遗漏了什么吗

我正在使用Codeigniter v1.72

在文件中:

它说:

$this->form_validation->set_规则('username'、'username'、'callback_username_check')

在我的类中,用户扩展控制器

我有一个功能寄存器:

$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');


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

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

您可能需要检查CodeIgniter是否允许您在同一规则中调用回调函数和预处理/验证函数。如果它不允许这样做,您可以在回调函数中调用
trim
require
xss\u clean

不过,我会说,如果允许的话,那么这肯定是正确的形式:

$this->form_validation->set_规则('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'))

看,在这一行中,实际上不应该调用函数。相反,您要将一个字符串传递给
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;
        }
}

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

您可能需要检查CodeIgniter是否允许您在同一规则中调用回调函数和预处理/验证函数。如果它不允许这样做,您可以在回调函数中调用
trim
require
xss\u clean

不过,我会说,如果允许的话,那么这肯定是正确的形式:

$this->form_validation->set_规则('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'))

看,在这一行中,实际上不应该调用函数。相反,您要将一个字符串传递给
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;
        }
}

我看不出在哪里可以向这个函数添加回调。@helle:这个函数是回调函数。如果你阅读他引用的网页,你会看到
callback\u username\u check
username\u check
设置为回调。我看不出在哪里可以向这个函数添加回调。@helle:这个函数是回调函数。如果你阅读他引用的网页,你会看到
callback\u username\u check
username\u check
设置为回调。谢谢!!!这是有效的:$This->form_validation->set_rules('username','username','callback_username_check');但现在我不能称trim、require和xss_为clean。你知道怎么做吗?谢谢!!!这是有效的:$This->form_validation->set_rules('username','username','callback_username_check');但现在我不能称trim、require和xss_为clean。你知道怎么做吗?
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;
        }
}