CodeIgniter 用户指南 版本 1.7.2

编辑文档、查看近期更改请 登录注册  找回密码
查看原文

辅助函数

辅助函数,顾名思义,是帮助我们完成特定任务的函数。每个辅助函数文件仅仅是一些函数的集合。例如,URL Helpers 可以帮助我们创建链接,Form Helpers 可以帮助我们创建表单,Text Helpers 提供一系列的格式化输出方式,Cookie Helpers 能帮助我们设置和读取COOKIE, File Helpers 能帮助我们处理文件,等等。

跟其他部分不同的是,辅助函数不是用类的方式来实现的。它们仅仅是一些简单的过程处理函数。 每个辅助函数处理一个特定的任务,并且不必依靠其他函数。

CodeIgniter 默认是没有载入辅助函数文件的,所以如果你想用辅助函数,就必须先载入它。 一旦被载入,辅助函数将全局可用(globally available),你可以在 controllerviews 中使用它们。

辅助函数文件一般保存在 system/helpers 文件夹。 但是你仍然可以选择在你的application文件夹下建立一个叫helpers的文件夹来存放它们。CodeIgniter 将会先在system/application/helpers寻找对应的辅助函数文件,如果目录不存在或者目录下没有对应的辅助函数文件,CI 才会载入 system/helpers 下的辅助函数文件。

载入辅助函数

载入辅助函数是非常简单的:

$this->load->helper('name');

name 是辅助函数文件的名字(不带.php后缀 和"helper" 部分)。

例如,要载入文件名为url_helper.phpURL 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_ 为前缀,所以切勿使用它做你的前缀。

现在可以做什么?

目录里面有所有辅助函数的列表,你可以打开每个文件看看他们都能做些什么。

 

翻译贡献者: Hex, iptton
最后修改: 2008-04-22 20:41:14