Я добавил «header_model» в файл autoload.php codeigniter. теперь это:
$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 класс (находится в папке 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.
Автозагружаемые классы, включая модели, оказываются переменными в контроллере. Итак, $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 обнаружит, что конструктор родительского класса выполнит его автоматически.
Сработало, спасибо :)