Codeigniter 模型自动加载不适用于 MY_Loader class
Codeigniter Model autoloading not working for MY_Loader class
我已经将 "header_model" 添加到 codeigniter 的 autoload.php 文件中。现在是:
$autoload['model'] = array("header_model");
而且我也可以在其他控制器中成功使用$this->header_model
。
但不能在 MY_Loader
class 中使用,它是 CI_Loader
.
的扩展
示例:
页面控制器 位于 application/controllers/:
class Pages extends CI_Controller {
public function view($page = 'home')
{
var_dump($this->header_model->get_menus()); //echoes data from database.
}
}
MY_Loader class (位于application/core/文件夹):
<?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;
}
}
感谢您的帮助。
问题是 $this
是 Pages
和 MY_Loader
中的两个不同对象。
Autoloaded classes,包括模型,最终成为控制器中的变量。所以 $this->->header_model...
在 Pages
中工作,因为它是一个控制器。但是函数template
中的对象$this
是MY_Loader
class的实例。并且 class 没有名为 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;
}
不是您的问题的一部分,但我想指出您不需要 MY_Model
中的 __construct()
函数。如果子 class 不在构造函数中进行任何初始化,则无需创建仅调用 parent::__construct();
的构造函数。 PHP 会找到父 class 构造函数自动执行它。
我已经将 "header_model" 添加到 codeigniter 的 autoload.php 文件中。现在是:
$autoload['model'] = array("header_model");
而且我也可以在其他控制器中成功使用$this->header_model
。
但不能在 MY_Loader
class 中使用,它是 CI_Loader
.
示例: 页面控制器 位于 application/controllers/:
class Pages extends CI_Controller {
public function view($page = 'home')
{
var_dump($this->header_model->get_menus()); //echoes data from database.
}
}
MY_Loader class (位于application/core/文件夹):
<?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;
}
}
感谢您的帮助。
问题是 $this
是 Pages
和 MY_Loader
中的两个不同对象。
Autoloaded classes,包括模型,最终成为控制器中的变量。所以 $this->->header_model...
在 Pages
中工作,因为它是一个控制器。但是函数template
中的对象$this
是MY_Loader
class的实例。并且 class 没有名为 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;
}
不是您的问题的一部分,但我想指出您不需要 MY_Model
中的 __construct()
函数。如果子 class 不在构造函数中进行任何初始化,则无需创建仅调用 parent::__construct();
的构造函数。 PHP 会找到父 class 构造函数自动执行它。