Codeigniter / OOP:加载自定义类后,我无法加载模型

时间:2013-03-13 16:24:06

标签: php oop codeigniter

我正在学习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->数据是我传递给管理员视图的内容。

更多信息:

  • 正如我所说,Admin控制器和我的自定义类ComponiPannello扩展了CI_Controller
  • ComponiPannello中的
  • 我有这个构造函数:

    function _ construct($ params){     父:: _construct();     $这 - >负载>库( '会话');     $ this-> baseUrl = $ params ['baseUrl']; }

  • 如果我在$ this-> load->库之前移动$ this-> load->模型部分我没有错误一切正常并返回正确的数据,但我想了解我在做什么。

  • 如果我保留它,我得到的错误如下:

致命错误:在...线上的非对象上调用成员函数get_categories()...

我希望我能以一种足够清楚的方式向你解释我的问题,以便你提前帮助我。感谢你提前花了很多时间。

3 个答案:

答案 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