我正在学习CI来自非MVC OOP内部框架,所以我仍然对一堆事情感到困惑,我并不总是理解什么是正常的OO编程VS.完成代码点火方式的事情。无论如何,我会试着解释我的问题:
我有一个名为Admin的控制器,它扩展了CI_Controller。
我创建了一个类(让我们说自定义类的含义是我不做的事情)我将该类放在库文件夹中,该类也扩展了CI_Controller(该扩展允许我使用加载方法和其他一些CI方法)。
从我的Admin控制器中,我正在加载我的自定义类(因为我是意大利语而命名为“ComponiPannello”),这样:
$parameters = array('baseUrl' => $this->baseUrl);
$this->load->library('ComponiPannello', $parameters);
一切都很完美我的“ComponiPannello”确实能够找到工作并返回管理员视图所需的内容。
现在我想在该类之后加载一个模型,因为我需要将更多信息传递给Admin视图,这些信息存储在DB中,我有一个特定的模型来提取这些额外的信息,所以我添加了一个几行,代码如下:
$parameters = array('baseUrl' => $this->baseUrl);
$this->load->library('ComponiPannello', $parameters);
$setup = $this->componipannello->return_data();
$this->data = array_merge($this->data, $setup);
$this->load->model('categories_model');
$this->data['categories'] = $this->categories_model->get_categories();
是$ this->数据是我传递给管理员视图的内容。
更多信息:
我有这个构造函数:
function _ construct($ params){ 父:: _construct(); $这 - >负载>库( '会话'); $ this-> baseUrl = $ params ['baseUrl']; }
如果我在$ this-> load->库之前移动$ this-> load->模型部分我没有错误一切正常并返回正确的数据,但我想了解我在做什么。
如果我保留它,我得到的错误如下:
致命错误:在...线上的非对象上调用成员函数get_categories()...
我希望我能以一种足够清楚的方式向你解释我的问题,以便你提前帮助我。感谢你提前花了很多时间。
路
答案 0 :(得分:3)
您的问题可能正在发生,因为您正在将另一个控制器作为库加载,而实际上它不是库。
您可以从库中加载库,帮助程序等,如下所示:
$CI =& get_instance();
在您的图书馆内,而不是$this->load->helper()
加载帮助,您现在可以使用$CI->load->helper()
。
有关此内容的更多信息,请参阅CI文档:http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html
答案 1 :(得分:3)
你在你的库中使用数据库对象吗?
利用库中的CodeIgniter资源。 要访问库中的CodeIgniter本机资源,请使用get_instance()函数。此函数返回CodeIgniter超级对象。
通常在控制器函数中,您将使用$ this结构调用任何可用的CodeIgniter函数:
$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
etc.
但是,这只能在您的控制器,模型或视图中直接使用。如果您想在自己的自定义类中使用CodeIgniter的类,可以按如下方式执行:
首先,将CodeIgniter对象分配给变量:
$CI =& get_instance();
$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
etc.
答案 2 :(得分:-2)
您的模型名称应以大写字母开头,将代码修改为:
$this->data['categories'] = $this->Categories_model->get_categories();
注意名称从categories_model
更改为Categories_model