在codeigniter中获取错误

时间:2011-07-12 18:20:14

标签: php codeigniter

我在我的codeigniter应用程序中自动加载了一个名为'render'的库。 该库的完整代码是:

class Render extends CI_Controller {
    public function template($template, $view, $extra_css, $extra_js) {
        $data = array();
        if (isset($view)) {
            $data['view'] = $view;
        }
        if (isset($extra_css)) {
            $data['extra_css'] = $extra_css;
        }
        if (isset($extra_js)) {
            $data['extra_js'] = $extra_js;
        }
        $template = $this->load->view("templates/$template", $data, TRUE);
        echo $template;
    }

}

这个库运行正常,但问题是无论何时我手动加载此库或通过编辑自动加载文件,我在任何控制器中加载任何模型时都会出错。

A PHP Error was encountered

Severity: Notice

Message: Undefined property: Home::$my_model_name

Filename: controllers/home.php

Line Number: 11

这里第10行和第11行是:

$this->load->model('my_model_name');
$this->my_model_name->my_model_method();

我也尝试使用:

$this->load->model('my_model_name', 'My_model');
$this->My_model->my_model_method();

我的控制器“主页”代码是:

class Home extends CI_Controller {
    function __construct() {
        parent::__construct();
    }
    public function index()
    {
        $this->load->model('my_model_name');
        $this->my_model_name->index();
    }
}

我试图将__construct()方法添加到我的库中,但仍然没有运气。

1 个答案:

答案 0 :(得分:6)

通过

class Render extends CI_Controller

你不是在创建一个库,而是一个控制器!要创建库,只需创建类并将其放入库文件夹即可。

在您的库中,如果您想使用CI的加载器来加载模型,例如,您需要实例化主CI类。

$CI = & get_instance();

类似(文件application/libraries/render.php):

    class Render {

      var $CI;

      function __construct()
      {
        $this->CI = &get_instance();
      }

       public function template($template, $view, $extra_css, $extra_js) {
        $data = array();
        if (isset($view)) {
            $data['view'] = $view;
        }
        if (isset($extra_css)) {
            $data['extra_css'] = $extra_css;
        }
        if (isset($extra_js)) {
            $data['extra_js'] = $extra_js;
        }
        $template = $this->CI->load->view("templates/$template", $data, TRUE);
        return $template;
    }
}

然后你可以$CI->load在你的图书馆,模特,其他图书馆等所有你想要的东西 有关详细说明,请参阅Utilize CI resource within your library。您通常以$this->load->library('render')$this->render->whatever();

的方式调用图书馆