2013-07-22 56 views
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 

我試圖加載在構造會話庫,但我得到了錯誤。有沒有任何選項可以使用會話庫裏面,或者我應該將會話的值作爲第二個參數傳遞?

+0

可能重複的[CodeIgniter客戶控制器類說會話是未定義](http://stackoverflow.com/questions/3817366/codeigniter- customer-controller-class-say-session-is-undefined) – Prasanth

+1

這不是這樣的......我有自動加載所有需要的圖書館和助手在配置。我在說擴展Libraray不是關於控制器:) – DeiForm

回答

2

如果您需要從庫中訪問另一個加載的庫,則需要訪問codeigniter實例。

當你正在擴展現有的表單驗證庫,您可以通過使用訪問笨實例:

$this->CI 

所以,你的情況,你可以通過訪問會話:

$this->CI->session->userdata('captcha') 
+0

謝謝,完美的作品:) – DeiForm

0

codeigniter中的庫必須獲取CI對象的實例(在調用會話時您會想到$ this)。

以下內容添加到您的構造器功能:引用屬性時

$CI =& get_instance(); 

現在/在CI對象的方法,只需要用$ CI而不是$此:

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

等。因此,當需要庫之外的東西時使用$ CI,否則,您可以使用$ this

+0

我想我試過這個,它不工作 – DeiForm