我已将“ header_model”添加到codeigniter的autoload.php文件中。现在是:
$autoload['model'] = array("header_model");
我也可以在其他控制器中成功使用$this->header_model
。
但是不能在MY_Loader
类的扩展类CI_Loader
中使用它。
示例: 页面控制器位于应用程序/控制器/ :
class Pages extends CI_Controller {
public function view($page = 'home')
{
var_dump($this->header_model->get_menus()); //echoes data from database.
}
}
MY_Loader类(位于应用程序/核心/文件夹中):
<?php
class MY_Loader extends CI_Loader {
function __construct()
{
parent::__construct();
}
public function template($template_name, $vars = array(), $return = FALSE)
{
$menuArray = $this->header_model->get_menus(); //echoes errors
//like: Undefined property: MY_Loader::$header_model
$vars["menuArray"] = $menuArray;
}
}
感谢您的帮助。
答案 0 :(得分:1)
问题在于$this
是Pages
和MY_Loader
中的两个不同的对象。
自动加载的类(包括模型)最终成为控制器中的变量。因此$this->->header_model...
在Pages
中可以工作,因为它是控制器。但是函数$this
中的对象template
是MY_Loader
类的实例。而且该类没有名为header_model
的变量。
要引用控制器,请使用get_instance()
。这是
public function template($template_name, $vars = array(), $return = FALSE)
{
$CI =& get_instance();
$menuArray = $CI->header_model->get_menus(); //echoes errors
//like: Undefined property: MY_Loader::$header_model
$vars["menuArray"] = $menuArray;
}
这不是问题的一部分,但我想指出,您不需要__construct()
中的MY_Model
函数。如果子类未在构造函数中进行任何初始化,则无需创建构造函数仅调用parent::__construct();
。 PHP将发现父类构造函数自动执行它。