Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter/OOP:加载自定义类后,我可以';不要加载模型_Php_Oop_Codeigniter - Fatal编程技术网

Php Codeigniter/OOP:加载自定义类后,我可以';不要加载模型

Php Codeigniter/OOP:加载自定义类后,我可以';不要加载模型,php,oop,codeigniter,Php,Oop,Codeigniter,我从一个非MVC OOP内部框架学习CI,所以我仍然对一大堆事情感到困惑,我并不总是理解什么是正常的OO编程,什么是以代码点火器的方式完成的。无论如何,我将尝试解释我的问题: 我有一个名为Admin的控制器,它扩展了CI_控制器 我创建了一个类(假设自定义类的意思是我创建的不是ODCI的一部分),我将该类放在库文件夹中,该类还扩展了CI_控制器(该扩展允许我使用load方法和其他一些CI方法) 从我的管理控制器,我正在加载我的自定义类(因为我是意大利人,所以名为“ComponiPannello”

我从一个非MVC OOP内部框架学习CI,所以我仍然对一大堆事情感到困惑,我并不总是理解什么是正常的OO编程,什么是以代码点火器的方式完成的。无论如何,我将尝试解释我的问题:

我有一个名为Admin的控制器,它扩展了CI_控制器

我创建了一个类(假设自定义类的意思是我创建的不是ODCI的一部分),我将该类放在库文件夹中,该类还扩展了CI_控制器(该扩展允许我使用load方法和其他一些CI方法)

从我的管理控制器,我正在加载我的自定义类(因为我是意大利人,所以名为“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(); 
WARE$this->数据是我传递给管理员视图的内容

更多信息:

  • 正如我所说,Admin controller和我的定制类ComponiPannello都扩展了CI_控制器
  • 在ComponiPannello中,我有一个构造函数:

    函数构造($params){ 父项::_构造(); $this->load->library('session'); $this->baseUrl=$params['baseUrl']; }

  • 如果我将$this->load->model部分移动到$this->load->library之前,我不会得到任何错误,一切正常,并返回正确的数据,但我想了解我在做什么

  • 如果我保持原样,我得到的错误如下:

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

我希望我能够以一种足够清晰的方式解释我的问题,以便您能够帮助我,提前感谢您花费的时间


Luke

您的问题可能是因为您正在加载另一个控制器作为库,而实际上它不是库

可以从库中加载库、帮助程序等,如下所示:

$CI=&get_instance()

从您的库中,您现在可以使用
$CI->load->helper()
而不是
$this->load->helper()
来加载助手


有关这方面的更多信息,请参阅CI文档:

在您的库中使用数据库对象是什么

利用库中的CodeIgniter资源。 要访问库中CodeIgniter的本机资源,请使用get_instance()函数。此函数返回CodeIgniter超级对象

通常,在控制器函数中,您将使用$this构造调用任何可用的CodeIgniter函数:

$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
etc. 
但是,$this仅在控制器、模型或视图中直接起作用。如果您想在自己的自定义类中使用CodeIgniter的类,可以按如下方式进行:

首先,将CodeIgniter对象指定给一个变量:

$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
etc. 

感谢您的帮助,我在CI手册中读到了类似的内容,但我不确定这是否是我的问题,但最重要的是,我没有100%清楚如何使用它,所以基本上在我的类(ComponiPannello)中,而不是使用$this->load->model,我必须按照您刚才说的做,对吗?所以$CI=&get_instance();。。。等等,对吗?另外两个问题:从我的自定义类扩展CI_控制器是否正确?从你上面写的来看是没有用的。为什么要写“你在你的库中使用数据库对象做什么?”我应该怎么做?从控制器中提取,然后将结果传递给类?类库需要做什么。解释我创建这个类是为了分割管理员必须做的事情,我的管理员控制器执行几个功能,因此我创建了ComponiPannello(英文ComposePanel),它负责呈现视图(基本上帮助我更好地组织管理员)。它需要数据库,因为它为管理员视图设置数据,处理从数据库中提取的数据,并将它们作为简单数组返回给管理员,准备传递给视图。为此,您不需要新的lib类。进入核心文件夹,制作管理员控制器并扩展MX或CI控制器。在你的构造器中定义你所需要的一切。您可以强制登录系统,所有扩展管理员控制器的页面都必须登录。试试这个更好。是:$CI=&get_instance();将被放置在我加载的库的_构造中?因此,我通常从控制器加载库,在库中放入$CI=&get_instance();i、 在构造中,然后$CI->load->helper()在其他任何地方?您可以将其添加到构造函数中,但除非将其设置为类变量,否则您将无法从其他类函数中获得作用域。或者,只需将它添加到您需要从中访问它的任何函数中。