【问题标题】:Codeigniter Model autoloading not working for MY_Loader classCodeigniter 模型自动加载不适用于 MY_Loader 类
【发布时间】:2018-12-20 12:45:37
【问题描述】:

我已将“header_model”添加到 codeigniter 的 autoload.php 文件中。现在是:

$autoload['model'] = array("header_model");

我也可以在其他控制器中成功使用$this->header_model

但不能在MY_Loader类中使用,它是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 类(位于 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;
   }
}

感谢您的帮助。

【问题讨论】:

    标签: php codeigniter codeigniter-3 autoloader


    【解决方案1】:

    问题在于$thisPagesMY_Loader 中的两个不同对象。

    自动加载的类,包括模型,最终成为控制器中的变量。所以$this-&gt;-&gt;header_model...Pages 中工作,因为它是一个控制器。但是函数template 中的对象$thisMY_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;
    }
    

    不是您的问题的一部分,但我想指出您不需要MY_Model 中的__construct() 函数。如果子类没有在构造函数中进行任何初始化,则无需创建构造函数来调用parent::__construct();。 PHP会自动找到父类的构造函数来执行。

    【讨论】:

    • 工作,谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 2017-07-27
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多