辅助函数
辅助函数,顾名思义,是帮助我们完成特定任务的函数。每个辅助函数文件仅仅是一些函数的集合。例如,URL Helpers 可以帮助我们创建链接,Form Helpers 可以帮助我们创建表单,Text Helpers 提供一系列的格式化输出方式,Cookie Helpers 能帮助我们设置和读取COOKIE, File Helpers 能帮助我们处理文件,等等。
跟其他部分不同的是,辅助函数不是用类的方式来实现的。它们仅仅是一些简单的过程处理函数。 每个辅助函数处理一个特定的任务,并且不必依靠其他函数。
CodeIgniter 默认是没有载入辅助函数文件的,所以如果你想用辅助函数,就必须先载入它。 一旦被载入,辅助函数将全局可用(globally available),你可以在 controller 和 views 中使用它们。
辅助函数文件一般保存在 system/helpers 文件夹。 但是你仍然可以选择在你的application文件夹下建立一个叫helpers的文件夹来存放它们。CodeIgniter 将会先在system/application/helpers寻找对应的辅助函数文件,如果目录不存在或者目录下没有对应的辅助函数文件,CI 才会载入 system/helpers 下的辅助函数文件。
载入辅助函数
载入辅助函数是非常简单的:
$this->load->helper('name');
name 是辅助函数文件的名字(不带.php后缀 和"helper" 部分)。
例如,要载入文件名为url_helper.php的URL Helper,你将会用到下面的语句:
$this->load->helper('url');
辅助函数可以在你的控制器(controller)的任何地方被载入,甚至可以在视图(View)文件中被载入(我们并不建议你这么做)。 请在使用辅助函数之前载入他们。你可以在你的控制器构造函数中载入它们,以便辅助函数能自动在其他函数之前被载入。你也可以在要用到辅助函数的地方当场载入。
注意: 辅助函数载入函数并不返回值,所以不要尝试将它付给一个变量,直接像这样用就可以了。
载入多个辅助函数
如果你想一次载入多个辅助函数,你可以这样做:
$this->load->helper( array('helper1', 'helper2', 'helper3') );
自动载入辅助函数
如果你想要的话,CodeIgniter可以自动为你载入辅助函数。你可以通过打开 application/config/autoload.php ,并往自动载入数组(autoload array)中增加辅助函数来实现。
使用辅助函数
一旦你载入了想要用到辅助函数文件,你就可以用标准的函数调用方法来使用里面的函数。
例如,要使用anchor() 函数来建立一个链接,在视图(View)文件里面你可以这样做:
<?=anchor('blog/comments', 'Click Here');?>
"Click Here" 是链接的名字,"blog/comments" 是链接的URI。
"扩展" Helper
要"扩展" 一个Helper, 必须在目录 application/helpers/ 下创建一个以MY_(这个是可配置的,详看下面内容)开头及加上已经存在的Helper名称为名的文件。
如果你只是想给已存在的Helper添加功能——可能是添加一或两个函数——或者你想改变某个辅助函数的操作——那么把该Helper完全换成你自己的版本就有点过份了。这样的情况下,更好的办法是简单地“扩展”该Helper。“扩展”一词在这里与一般编程术语中的“扩展”有所不同,因为Helper只是由一些零散的过程性的函数组成。Under the hood, 能让你给一个Helper添加函数或修改某些Helper函数的执行过程 。(this gives you the ability to add to the functions a Helper provides, or to modify how the native Helper functions operate.)
例如,扩展 Array Helper 你可以创建文件 application/helpers/MY_array_helper.php,然后添加或重写函数:
// any_in_array() 本不存在于Array Helper,所有这里定义了一个新的辅助函数
function any_in_array($needle, $haystack)
{
$needle = (is_array($needle)) ? $needle : array($needle);
foreach ($needle as $item)
{
if (in_array($item, $haystack))
{
return TRUE;
}
}
return FALSE;
}
// random_element() 已经存在于 Array Helper,所以这里新的函数将取代原函数。(译注:原文为override重写)
function random_element($array)
{
shuffle($array);
return array_pop();
}
设置辅助函数前缀
“扩展”Helper的前缀与扩展库及扩展核心类的前缀是一样的。可通过修改文件 application/config/config.php 来设置:
$config['subclass_prefix'] = 'MY_';
注意,所有的CodeIgniter框架的库都是用 CI_ 为前缀,所以切勿使用它做你的前缀。
现在可以做什么?
在目录里面有所有辅助函数的列表,你可以打开每个文件看看他们都能做些什么。