據這裏的Codeignitor文檔:http://ellislab.com/codeigniter/user-guide/general/hooks.html它指出:pre_controller鉤子不會加載像docs狀態那樣的基類?
pre_controller 立即調用之前,你的任何控制器被調用。所有基類,路由和安全檢查都已完成。
但是,如果我創建一個鉤子鉤pre_controller有:
$hook['pre_controller'][] = array(
'class' => 'tester',
'function' => 'test',
'filename' => 'tester.php',
'filepath' => 'models',
//'params' => array('beer', 'wine', 'snacks')
);
和文件tester.php是:
class tester extends CI_Model
{
public function __construct()
{
parent::__construct();
$this->load->library('migration');
}
public function test()
{
echo "hi";
exit;
}
}
我得到這個錯誤:
Fatal error: Class 'CI_Model' not found in ******.php
爲什麼是不是加載CI_Model?如果我把一個require_once('system/core/Model.php');在pre_controller定義上面的hooks.php文件,我得到這個錯誤:
Fatal error: Call to a member function library() on a non-object in ****.php
因爲它不是實際加載CI_Model,功能,例如庫()是行不通的。我如何強迫它引導CI_Model。
說「Use post_controller_constructor
」的第一個人將會被視爲未被回答的問題。我需要它加載之前,它從控制器類運行任何構造函數。我需要訪問擴展CI_Model類從預控制器掛鉤。
骯髒的修復是好的只要它的工作,並不需要一個不同的鉤子:D我很失望,雖然文檔不正確。我會認爲Model類是核心的一部分。即使load_class建議表明它是一個核心項目;)我將在幾分鐘內嘗試這個嘗試,並會報告這是否可行。 – user3488435
那麼,這隻會導致我得到的同樣的錯誤,如果我只是require_once模型類文件不做任何事情。如果我使用這個,我會得到:致命錯誤:在****。php中調用一個非對象的成員函數庫(),我一直在追蹤它,並認爲它與加載器類有關。 – user3488435
我同意這些文檔具有誤導性 - 我會考慮模型的核心部分!對不起,沒有解決它。我已經指出了這個問題 - 在CodeIgniter.php中,第308行,'$ CI = new $ class();'是加載庫所必需的。這是_pre controller_掛鉤之後。在掛鉤前移動它,它應該工作。我不知道是否還有其他影響 - 請自行承擔風險!你究竟在努力實現什麼? – jleft