0

このコードでフォーム検証ライブラリを拡張しようとしています:

class MY_Form_validation extends CI_Form_validation {

    public function __construct() {
        parent::__construct();
    }

    public function check_captcha($captcha)
    {
        if ($captcha == $this->session->userdata('captcha'))
        {
            return TRUE;
        }   else
        {
            $this->form_validation->set_message('check_captcha', "Please copy captcha again.");
            return FALSE;
        }
    }
}

検証を実行すると、次のエラーが発生します。

Message: Undefined property: MY_Form_validation::$session
Filename: libraries/MY_Form_validation.php

コンストラクトでセッション ライブラリをロードしようとしましたが、再度エラーが発生しました。内部でセッション ライブラリを使用するオプションはありますか、それともセッションからの値を 2 番目のパラメーターとして渡す必要がありますか?

4

2 に答える 2

2

ライブラリ内から別のロード済みライブラリにアクセスする必要がある場合は、codeigniter インスタンスにアクセスする必要があります。

既存のフォーム検証ライブラリを拡張しているので、次を使用して codeigniter インスタンスにアクセスできます。

$this->CI

したがって、あなたの場合、次を使用してセッションにアクセスできます。

$this->CI->session->userdata('captcha')
于 2013-07-22T19:49:46.157 に答える
0

codeigniter のライブラリは、CI オブジェクトのインスタンスを取得する必要があります (セッションを呼び出すときに $this と見なされるもの)。

コンストラクター関数に次を追加します。

$CI =& get_instance();

CI オブジェクトのプロパティ/メソッドを参照するときは、$this の代わりに $CI を使用してください。

if($captcha == $CI->session->userdata('captcha'))

等々。したがって、ライブラリの外部で何かが必要な場合は $CI を使用します。それ以外の場合は、$this を使用できます

于 2013-07-22T19:51:59.217 に答える