2010-07-29 37 views
0

這是我的問題。我正在構建一個需要過濾器的應用程序。我已經得到了過濾系統的工作,我甚至可以確定我想要訪問的實際方法。問題是我無法從過濾器文件訪問CI核心。我在網上搜索過,雖然我發現了一些建議的解決方案,比如「浸入CI」,但不推薦使用它們,因爲它們會導致PHP應用程序不穩定。如何在codeigniter掛鉤文件中加載我的模型

在我的申請的樣品過濾器如下面寫

class Trust_filter extends Filter { 
    function before() { 
    $this -> ci = &get_instance(); 
    if ($this -> ci -> auth -> is_user_active()) { 
     $this -> ci -> load -> model("trust_model", "trustmanager"); 
     if ($this -> trustmanager -> verify()) { 
     echo "##090##"; 
     } 
    } 
    } 
} 

上面的代碼不工作,因爲CI對象是一個非對象。我無法得到一個實例,而且我已經無情地度過了整整一個晚上。我使用CodeIgniter 1.7.1。任何幫助將不勝感激。

編輯:我已經找到了問題的答案。在創建構造函數後,我將過濾器系統擴展爲工作,以確保我可以訪問CI超級對象。我的代碼也很完美。感謝所有,但我仍然對你的解決方案感興趣。

+0

你是什麼意思,「CI對象是一個非對象」? get_instance()返回null? – ebynum 2010-07-30 04:26:49

回答

1

在加載和創建事物時,codeigniter存在很多奇怪的地方。在鉤子方面,經常會發現庫/助手/配置/模型不會被加載,直到控制器構建完成後,它會成爲很多情況下的痛點(比如這個)。

嘗試將此鉤子作爲後控制器構造調用。此時,您一定能夠訪問ci實例,但我不確定是否可以訪問模型。

另請注意,模型應該只能從內部控制器加載/使用(其原因之一可能無法在預控制器鉤子中工作)。 Codeigniter和許多程序員通過在庫中創建類似行爲的模型(例如會話庫)來解決這個問題。

+0

只是看到了這一點。謝謝,真的很感激它。最終放棄過濾器並致力於實現基於繼承的觀察者模式流。謝謝。 – 2010-12-01 12:07:00

3
$ci=&get_instance(); 

$ci->load->model("auth"); 

$ci->auth->login(); 

這種類型可以獲取或訪問鉤子文件中的模型。