私有方法无法正常工作的codeigniter回调

时间:2013-04-18 09:06:42

标签: php codeigniter callback validation codeigniter-2

我使用表单验证库和我的自定义回调在CodeIgniter中进行表单验证。

public function insert_user()
{
    if($this->input->post('submit')) {
        // load form validation library
        $this->load->library('form_validation');

        // configurations
        $config = array(
            array(
                'field' => 'username',
                'label' => 'Username',
                'rules' => 'required|callback_username_check'
            )
        );
        $this->form_validation->set_rules($config);

        // .... continue ....
    }   
}

当方法公开时,它按预期工作。

public function username_check($username)
{
    // do some stuffs here
}

当我将方法设为私有时,它无效。

private function username_check($username)
{
    // do some stuffs here
}

为什么私有方法的回调不起作用?

为什么我需要这个?

CodeIgniter控制器中的公共方法可通过URL访问,如上面的示例

  

http://example.com/controller_name/username_check/blabla

我不希望公开访问回调方法。

2 个答案:

答案 0 :(得分:2)

回调函数必须是公共的。 Codeigniter表单验证类在当前控制器上访问您的函数,因此它可能不是私有的..

要解决您的问题,您可以考虑使用My_form_validation扩展CI_Form_validation类..

class MY_Form_validation extends CI_Form_validation
{
    public function __construct()
    {
       parent::__construct();
    }

    function username_check($str)
    {
      /* your code */
    }

} 

然后在您的验证中,您必须只设置..

            'rules' => 'required|username_check'

答案 1 :(得分:0)

私有函数只能由类的对象访问。此函数仅在其自己的类中可见。阅读有关变量/函数范围here

的更多信息