我有很多控制器使用相同的代码块,这些代码块采用不同的参数集。这些代码块是相同的,我想将其转移到Helper文件中,然后我可以将其作为控制器中的函数调用。
但是,当我将代码移动到自定义助手时,CI的核心功能就不起作用了。
例如,我已经自动加载了我的数据库和会话类,并在我的控制器中经常调用它们。我有一段代码(我在整个应用程序中使用很多次),它接受一些会话数据,针对数据库查询运行它,然后返回值。
当我用自定义函数替换代码时(我将代码放在我的自定义帮助文件中的函数中),传递参数,并尝试运行代码,每当我尝试运行数据库查询时应用程序都会停止使用参数,引入会话数据,甚至尝试回显任何uri段。
我知道我已经正确放置和配置了帮助文件,因为我能够调用不使用任何Codeigniter库的自定义函数。
非常感谢任何有关此问题的帮助。
答案 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');