CodeIgniter 使用手冊版本 2.2.0


補助函數(Helper Functions)

如同它的名稱,補助函數協助你處理特定的任務。每個補助函數檔案就是一些特定用途函數的集合。有 URL 補助函數 協助產生連結;有 Form 補助函數 協助你產生表單元素;有 Text 補助函數 從事各種文字格式化工作;有 Cookie 補助函數 可設定及讀取cookies;有 File 補助函數 協助你處理檔案等等。

不像其他 CodeIgniter 中的系統,補助函數不是用物件導向的格式寫的。它們只是程序式的函數。每個補助函式可執行一種特定的任務,完全不依賴其他函數。

CodeIgniter 預設並不會載入補助函數,所以要使用補助函數時,第一步就是要載入它。一旦載入後,它就可在你的 控制器(controller)檢視(views) 中全域使用。

補助函數一般會放在 system/helpersapplication/helpers 目錄中。CodeIgniter 會先從你的 application/helpers 目錄尋找,如果這個目錄不存在或是檔案找不到,它才到全域的 system/helpers 目錄尋找。

載入補助函數

載入一個補助函數檔案只需要簡單地使用下面的函數:

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

其中 name 是不含 ".php" 副檔名或 "helper" 部份的補助函數檔案名稱。

例如,要載入 URL 補助函數 檔案,而他的檔名叫做 url_helper.php ,那你要這樣做:

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

一個補助函數可以在控制器(controller)函數的任何地方載入(或者說在你的檢視(view)檔案裡頭,雖然這不是個好作法),只要你載入它就可以使用。你可以在控制器(controller)的建構函數中載入它,這樣就可自動在任何函數中使用它。你也可以在需要的時候在特定的函數中載入。

注意:以上載入補助函數的函數並不返回任何值,所以不要把它指派給任何變數,只要像我們示範的這樣使用就好了。

載入多個補助函數

如果你需要載入多個補助函數,只要在一個陣列中指定,像這樣:

$this->load->helper( array('helper1', 'helper2', 'helper3') );

自動載入補助函數

如果你發現你需要在你的應用程式中隨處都可使用某個補助函數,你可以讓 CodeIgniter 在系統初始化時自動載入。這可透過編輯 application/config/autoload.php 檔案,把補助函數加到自動載入陣列來做到。

使用補助函數

一旦你載入了包含你要使用函數的補助函數檔案,你就可以像使用標準PHP函數這樣來呼叫它。

例如,要使用 anchor() 函數在你的檢視(view)檔案中產生連結,你可以這樣做:

<?php echo anchor('blog/comments', 'Click Here');?>

其中 "Click Here" 是連結的名稱,而 "blog/comments" 是你要連結到的控制器(controller)/函數的URI。

"擴充(extend)" 補助函數

要 "擴充(extend)" 補助函數,要在你的 application/helpers/ 目錄中新增一個與現存補助函數相同名稱再加上 MY_ 前置字串的檔案。(這是可設定的,請看下面說明)

如果你需要的是在現存的補助函數中增加一些功能,也許是增加一兩個函數,或是改變某個補助函數的運作方式,那把整個補助函數用你的版本替換掉殺傷力就太大了。在這個場合較佳的做法就是 "擴充(extend)" 補助函數。既然補助函數只是程序性、離散且在傳統程式的意義上是無法擴充的,所以 "擴充(extend)" 這個詞在這裡只是在不嚴謹的意義下使用。這樣讓你能增加補助函數所提供的功能,或是更動內建補助函數的運作方式。

例如,要擴充內建的 Array 補助函數 ,你要新增一個叫做 application/helpers/MY_array_helper.php 的檔案,然後增加或覆蓋函數:

// any_in_array() 並不在 Array 補助函數中,所以要定義一個新函數
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 補助函數中,所以會覆蓋原有的函數
function random_element($array)
{
    shuffle($array);
    return array_pop($array);
}

自訂子類別的前置字串

擴充補助函數所使用的檔名前置字串與擴充程式庫及核心類別相同。要設定你自己的前置字串,可以像這樣尋找並編輯 application/config/config.php 檔案中的設定:

$config['subclass_prefix'] = 'MY_';

請注意所有 CodeIgniter 內建的程式庫都會使用 CI_ 前置字串,所以避免使用它作為你自己要用的前置字串。

然後咧?

在目錄中你可以找到一份可用補助函數檔案的清單。瀏覽一下看看每個補助函數可以做什麼。