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 フォーム検証クラスは現在のコントローラーで関数にアクセスするため、プライベートではない可能性があります..

問題を回避するには、 CI_Form_validation クラスを My_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 に答える