我在我的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()方法添加到我的库中,但仍然没有运气。
答案 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();