2010-03-02 81 views
12

爲什麼我的模型不能加載加密庫?在CodeIgniter的模型中加載庫

class User_model extends Model { 

    function User_model() { 
    parent::Model(); 
    $this->check_login(); 
    } 

    function check_login() { 
    $this->load->library('encrypt'); 
    $email = $this->encrypt->decode($email); 
    .... 
    } 
} 

這給我一個PHP錯誤:調用一個成員函數解碼()非物體上線X - 其中X是$這個 - > encrypt->解碼($電子郵件);線?

編輯以表明問題是check_login從構造

回答

5

我是從構造函數中調用check_login調用,這是造成問題。

解決方法是在構造函數中加載庫後立即調用$this->_assign_libraries();

由於這個codeignitor論壇主題: http://codeigniter.com/forums/viewthread/145537/

+3

我知道這個線程很老,但是如果你看到這一點,請注意,CI的當前版本允許你在模型中加載庫,沒有任何問題。 – 2014-02-01 21:18:23

20

你並不需要加載在模型庫,模型往往從控制器調用,所以你只需要加載庫中的控制器,和這些功能將會在他的模型中提供!

問候,
佩德羅

+10

是的,但在需要它們的地方加載庫會降低依賴性問題。 – Summer 2010-03-04 16:10:15

+1

因此,將其加載到調用模型的控制器功能中即可 – Pedro 2010-03-05 09:22:53

+11

多麼糟糕的主意!嚴重的是CodeIgniter團隊另一個短視的錯誤!模型是一個完美的地方,可以使用處理獲取應用程序數據的API庫!強迫我在控制器中加載一個底層Model類所依賴的庫!我勒個去?擰緊!只需調用$ this - > _ assign_libraries();完成了! – Bretticus 2010-09-02 04:57:33

3

圖書館應自動被分配到模型實例所以它應該工作的罰款。

請記住,如果您無法訪問超級全局,您可以隨時使用$ ci = & get_instance()來獲取內存中的額外成本。

但仍然...你的代碼示例應該工作>。 <

2

我已經嘗試了很多人,但最終,我所做的就是這樣一個模型:

$this->load->library('mylib'); 
$mylib= new Mylib(); 
$mylib->somemethod(); 

這對我的作品。

0

您可能希望更改您加載 庫中的對象的名稱東陽CI也已經拿到了加密類

只是做

$this->load->library('encrypt',NULL,'myencryptobj'); 
$this->myencryptobj->yourfunction(); 

希望這有助於

0

我也面臨着關於Facebook的API的問題,然後我試圖在模型中required_once的Facebook的lib文件。它爲我工作。

require_once「application/libraries/facebook.php」; 然後根據需要製作其對象。