Php Codeigniter模型自动加载不适用于MY_Loader类
我已经在codeigniter的autoload.php文件中添加了“header\u model”。现在是:Php Codeigniter模型自动加载不适用于MY_Loader类,php,codeigniter,codeigniter-3,autoloader,Php,Codeigniter,Codeigniter 3,Autoloader,我已经在codeigniter的autoload.php文件中添加了“header\u model”。现在是: $autoload['model'] = array("header_model"); 我还可以在其他控制器中成功地使用$this->header\u model 但是不能在MY\u Loader类中使用它,该类是CI\u Loader的扩展 例如: 位于应用程序/控制器/的页控制器: MY_Loader类(位于应用程序/核心/文件夹中): 问题在于$此是页面和我的加载器中的两个不同
$autoload['model'] = array("header_model");
我还可以在其他控制器中成功地使用$this->header\u model
但是不能在MY\u Loader
类中使用它,该类是CI\u Loader
的扩展
例如:
位于应用程序/控制器/的页控制器:
MY_Loader类(位于应用程序/核心/文件夹中):
问题在于$此
是页面
和我的加载器
中的两个不同对象
自动加载的类(包括模型)最终成为控制器中的变量。因此,$this->->->header\u model…
在页面中工作,因为它是一个控制器。但是函数模板中的对象$this
是myu Loader
类的实例。该类没有名为header\u model
的变量
要引用控制器,请使用get\u 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;
}
这不是问题的一部分,但我想指出的是,您不需要MY\u Model
中的\u construct()
函数。如果子类不在构造函数中进行任何初始化,则无需创建一个只调用parent::u construct()的构造函数代码>。PHP将找到父类构造函数并自动执行它。成功,谢谢:)
<?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;
}
}
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;
}