CodeIgniter辅助函数helper详解
1.辅助函数概述
helper辅助函数,顾名思义,就是帮助我们完成各种特定任务的一系列函数。并且每个辅助函数文件是一系列的功能集合汇总在一起。比如可以帮助我们创建链接的URLHelpers,有创建表的FormHelpers,有文本格式化输出的TextHelpers,有设置和读取cookie的CookieHelpers,还有文件FileHelpers等等。
不同于大多数其他系统的是,CodeIgniter的辅助函数没有采用类的方式实现。而是简单的,程序的功能。每个辅助函数处理一个特定的任务,并且不必依靠其他函数。
CodeIgniter默认是没有载入辅助函数文件的,所以如果你想用辅助函数,就必须先载入它。一旦被载入,辅助函数将全局可用(globallyavailable),你可以在controller和views中使用它们。
辅助函数文件一般保存在system/helpers或application/helpers文件夹中。CodeIgniter将会先在application/helpers寻找对应的辅助函数文件,如果目录不存在或者目录下没有对应的辅助函数文件,CI才会载入system/helpers下的辅助函数文件。
2.载入辅助函数
载入辅助函数是非常简单的,如下所示:
$this->load->helper('name');
其中name是辅助函数文件的名字(不带.php后缀和"helper"部分)。
例如,要载入文件名为url_helper.php的URLHelper,可采用下面的语句:
$this->load->helper('url');
辅助函数可以在你的控制器(controller)的任何地方被载入,甚至可以在视图(View)文件中被载入(我们并不建议你这么做)。请在使用辅助函数之前载入他们。你可以在你的控制器构造函数中载入它们,以便辅助函数能自动在其他函数之前被载入。你也可以在要用到辅助函数的地方当场载入。
注意:辅助函数载入函数并不返回值,所以不要尝试将它付给一个变量,直接像这样用就可以了。
3.载入多个辅助函数
如果你想一次载入多个辅助函数,你可以这样做:
$this->load->helper(array('helper1','helper2','helper3'));
4.自动载入辅助函数
如果你想要的话,CodeIgniter可以自动为你载入辅助函数。你可以通过打开application/config/autoload.php,并往自动载入数组(autoloadarray)中增加辅助函数来实现。
5.使用辅助函数
一旦你载入了想要用到辅助函数文件,你就可以用标准的函数调用方法来使用里面的函数。
例如,要使用anchor()函数来建立一个链接,在视图(View)文件里面你可以这样做:
<?phpechoanchor('blog/comments','ClickHere');?>
这里的"ClickHere"是链接的名字,"blog/comments"是链接的URI。
注意:辅助函数中的函数名最好做好命名规范,如果同时加载多个辅助函数文件,且其中有名称相同的函数,会导致CI出现空白页问题(这也是PHP语法错误)。
6.“扩展”辅助函数
你如果想"扩展"一个原有的Helpers,可以在你的application/helpers/目录下创建一个新的helper,新的helper的名字是在被“扩展”的Helper的名字开头多加一个MY_(这是可以配置的.见下.).
如果你想做的只是在原有的helper中添加一些新的功能,比如,添加一两个新的方法,或者是修改一个方法;就不值得重写自己的helper。在这种情况下,最好是“扩展”已有的helper。“扩展”一词用在这里不是很恰当,因为Helper的方法是过程式的(procedural)和离散(discrete)的,在传统的语言环境中无法被“扩展”,不过在CodeIgniter中,你可以添加或修改helper的方法。
例如,扩展一个本地已有的ArrayHelper你应该建立一个文件:application/helpers/MY_array_helper.php,并添加或重写(override)其中的一些方法:
//any_in_array()isnotintheArrayHelper,soitdefinesanewfunction functionany_in_array($needle,$haystack) { $needle=(is_array($needle))?$needle:array($needle); foreach($needleas$item) { if(in_array($item,$haystack)) { returnTRUE; } } returnFALSE; } //random_element()isincludedinArrayHelper,soitoverridesthenativefunction functionrandom_element($array) { shuffle($array); returnarray_pop($array); }
7.设定你自己的前缀(Prefix)
用于"扩展"helper而加上前缀的文件同样也是对库和核心类的扩展.为了设置你自定义的前缀,请打开application/config/config.php文件,然后找到如下的条目:
$config['subclass_prefix']='MY_';
这里需要注意:由于所有CodeIgniter自带的库都被冠以CI_这样的前缀命名,所以请不要使用CI_来自定义前缀.