輔助函數(shù)
輔助函數(shù),顧名思義,是幫助我們完成特定任務(wù)的函數(shù)。每個(gè)輔助函數(shù)文件僅僅是一些函數(shù)的集合。例如,URL Helpers 可以幫助我們創(chuàng)建鏈接,Form Helpers 可以幫助我們創(chuàng)建表單,Text Helpers 提供一系列的格式化輸出方式,Cookie Helpers 能幫助我們?cè)O(shè)置和讀取COOKIE, File Helpers 能幫助我們處理文件,等等。
跟其他部分不同的是,輔助函數(shù)不是用類的方式來(lái)實(shí)現(xiàn)的。它們僅僅是一些簡(jiǎn)單的過(guò)程處理函數(shù)。 每個(gè)輔助函數(shù)處理一個(gè)特定的任務(wù),并且不必依靠其他函數(shù)。
CodeIgniter 默認(rèn)是沒(méi)有載入輔助函數(shù)文件的,所以如果你想用輔助函數(shù),就必須先載入它。 一旦被載入,輔助函數(shù)將全局可用(globally available),你可以在 controller 和 views 中使用它們。
輔助函數(shù)文件一般保存在 system/helpers 或 application/helpers 文件夾中。CodeIgniter 將會(huì)先在 application/helpers 尋找對(duì)應(yīng)的輔助函數(shù)文件, 如果目錄不存在或者目錄下沒(méi)有對(duì)應(yīng)的輔助函數(shù)文件,CI 才會(huì)載入 system/helpers 下的輔助函數(shù)文件。
載入輔助函數(shù)
載入輔助函數(shù)是非常簡(jiǎn)單的:
$this->load->helper('name');
name 是輔助函數(shù)文件的名字(不帶.php后綴 和"helper" 部分)。
例如,要載入文件名為url_helper.php的URL Helper,你將會(huì)用到下面的語(yǔ)句:
$this->load->helper('url');
輔助函數(shù)可以在你的控制器(controller)的任何地方被載入,甚至可以在視圖(View)文件中被載入(我們并不建議你這么做)。 請(qǐng)?jiān)谑褂幂o助函數(shù)之前載入他們。你可以在你的控制器構(gòu)造函數(shù)中載入它們,以便輔助函數(shù)能自動(dòng)在其他函數(shù)之前被載入。你也可以在要用到輔助函數(shù)的地方當(dāng)場(chǎng)載入。
注意: 輔助函數(shù)載入函數(shù)并不返回值,所以不要嘗試將它付給一個(gè)變量,直接像這樣用就可以了。
載入多個(gè)輔助函數(shù)
如果你想一次載入多個(gè)輔助函數(shù),你可以這樣做:
$this->load->helper( array('helper1', 'helper2', 'helper3') );
自動(dòng)載入輔助函數(shù)
如果你想要的話,CodeIgniter可以自動(dòng)為你載入輔助函數(shù)。你可以通過(guò)打開(kāi) application/config/autoload.php ,并往自動(dòng)載入數(shù)組(autoload array)中增加輔助函數(shù)來(lái)實(shí)現(xiàn)。
使用輔助函數(shù)
一旦你載入了想要用到輔助函數(shù)文件,你就可以用標(biāo)準(zhǔn)的函數(shù)調(diào)用方法來(lái)使用里面的函數(shù)。
例如,要使用anchor() 函數(shù)來(lái)建立一個(gè)鏈接,在視圖(View)文件里面你可以這樣做:
<?php echo anchor('blog/comments', 'Click Here');?>
"Click Here" 是鏈接的名字,"blog/comments" 是鏈接的URI。
"擴(kuò)展" Helpers
你如果想 "擴(kuò)展"一個(gè)原有的 Helpers,,可以在你的 application/helpers/ 目錄下創(chuàng)建一個(gè)新的helper,新的helper的名字是在被“擴(kuò)展”的Helper的名字開(kāi)頭多加一個(gè) MY_ (這是可以配置的. 見(jiàn)下.).
如果你想做的只是在原有的helper中添加一些新的功能,比如,添加一兩個(gè)新的方法,或者是修改一個(gè)方法;就不值得重寫(xiě)自己的helper。在這種情況下,最好是“擴(kuò)展”已有的helper?!皵U(kuò)展”一詞用在這里不是很恰當(dāng),因?yàn)镠elper的方法是程序化(procedural) 和離散(discrete)的,在傳統(tǒng)的語(yǔ)言環(huán)境中無(wú)法被“擴(kuò)展”,不過(guò)在CodeIgniter中,你可以添加或修改helper的方法。
例如,擴(kuò)展一個(gè)本地已有的 Array Helper 你應(yīng)該建立一個(gè)文件: application/helpers/MY_array_helper.php, 并添加或重寫(xiě)(override)其中的一些方法:
// any_in_array() is not in the Array Helper, so it defines a new function
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() is included in Array Helper, so it overrides the native function
function random_element($array)
{
????shuffle($array);
????return array_pop($array);
}
設(shè)定你自己的前綴(Prefix)
用于"擴(kuò)展" helper 而加上前綴的文件同樣也是對(duì)庫(kù)和核心類的擴(kuò)展.為了設(shè)置你自定義的前綴,請(qǐng)打開(kāi) application/config/config.php 文件,然后找到如下的條目:
$config['subclass_prefix'] = 'MY_';
請(qǐng)注意:由于所有CodeIgniter自帶的庫(kù)都被冠以 CI_ 這樣的前綴命名,所以請(qǐng)不要使用CI_來(lái)自定義前綴.
現(xiàn)在可以做什么?
在目錄里面有所有輔助函數(shù)的列表,你可以打開(kāi)每個(gè)文件看看他們都能做些什么。
不過(guò)目前還沒(méi)有想到更好的方法讓我們?nèi)绾斡涀∵@些輔助函數(shù)!要不編輯個(gè)快速查詢手冊(cè)??如果你有更好的方法請(qǐng)告訴我!
?