Codeigniter的核心功能可以在自定义功能中运行吗?

时间:2013-12-04 00:16:21

标签: php codeigniter helper

我有很多控制器使用相同的代码块,这些代码块采用不同的参数集。这些代码块是相同的,我想将其转移到Helper文件中,然后我可以将其作为控制器中的函数调用。

但是,当我将代码移动到自定义助手时,CI的核心功能就不起作用了。

例如,我已经自动加载了我的数据库和会话类,并在我的控制器中经常调用它们。我有一段代码(我在整个应用程序中使用很多次),它接受一些会话数据,针对数据库查询运行它,然后返回值。

当我用自定义函数替换代码时(我将代码放在我的自定义帮助文件中的函数中),传递参数,并尝试运行代码,每当我尝试运行数据库查询时应用程序都会停止使用参数,引入会话数据,甚至尝试回显任何uri段。

我知道我已经正确放置和配置了帮助文件,因为我能够调用不使用任何Codeigniter库的自定义函数。

非常感谢任何有关此问题的帮助。

3 个答案:

答案 0 :(得分:0)

根据codeigniter docs:

将对象分配给变量后,您将使用该变量而不是$ this:

$CI =& get_instance();
$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');

答案 1 :(得分:0)

根据文档,帮助者不应该这样工作:

http://ellislab.com/codeigniter%20/user-guide/general/helpers.html

  

与CodeIgniter中的大多数其他系统不同,Helpers不是写入的   面向对象的格式。它们是简单的程序功能。每   辅助函数执行一个特定的任务,不依赖于   其他功能。

除非您将各个属性作为参数传递给助手,否则您将无法直接在助手中使用会话和数据库中的信息。

如果您想使用使用Codeigniter其他方面的公共代码,例如会话和数据库,您应该创建一个新的Codeigniter ,而不是CI助手。

答案 2 :(得分:0)

在帮助程序中,您无权访问codeigniter功能,因此首先获取codeigniter的实例

$CI =& get_instance();

之后使用$ CI加载您想要的任何内容{例如$CI->load->helper('url'); $this->load->helper('url');