1

我使用表单验证库和我的自定义回调在 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

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

4

2 回答 2

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'
于 2013-04-18T09:42:21.300 回答
0

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

于 2013-04-18T09:09:57.157 回答