CodeIgniter4 輔助函數(shù)

2020-08-17 14:38 更新

輔助函數(shù)正如其名,是用于輔助你處理任務(wù)的。每個(gè)輔助文件都只是一個(gè)特殊分類下一系列函數(shù)的集合。 例如 URL輔助函數(shù) 用于創(chuàng)建鏈接,表單輔助函數(shù) 用于創(chuàng)建表單元素,文本輔助函數(shù) 用于不同的文本編排方式,Cookie輔助函數(shù)用于設(shè)置和獲取cookies,文件輔助函數(shù)用于處理文件等。

與CodeIgniter中其他大多數(shù)的系統(tǒng)部件有所不同,輔助函數(shù)不是以面向?qū)ο蟮姆绞綄?shí)現(xiàn)的,而僅僅是簡(jiǎn)單的,程序化的函數(shù)方法。 每個(gè)輔助函數(shù)都只執(zhí)行一個(gè)特定的功能,并與其他的函數(shù)不產(chǎn)生依賴。

CodeIgniter在默認(rèn)情況下不加載輔助函數(shù)文件,因此使用它的第一步就是加載它。 而當(dāng)輔助函數(shù)被加載后,該函數(shù)就在你的 控制器 and 視圖 中全局可用。

輔助函數(shù)通常儲(chǔ)存在 system/Helpersapp/Helpers directory 下。CodeIgniter首先會(huì)在 app/Helpers 目錄下進(jìn)行查找,但是如果該目錄不存在,或者指定的輔助函數(shù)文件不在當(dāng)前位置。 CI就會(huì)在你的全局 system/Helpers/ 目錄下進(jìn)行搜索。

加載一個(gè)輔助文件

可以使用如下方法來(lái)輕易地加載輔助文件:

  helper('name');

其中 name 是輔助文件的文件名,并不需要帶有.php的文件擴(kuò)展名或者是”helper”這部分。

舉例來(lái)說(shuō),為了加載名為cookie_helper.phpCookie輔助文件,你需要這樣做:

  helper('cookie');

如果你需要加載多個(gè)輔助文件,可以通過(guò)傳值一個(gè)文件名構(gòu)成的數(shù)組,這樣一來(lái)這些文件就都會(huì)被加載了:

  helper(['cookie', 'date']);

一個(gè)輔助函數(shù)文件可以在你的控制器方法里的任意位置被加載(甚至在你的視圖文件里,雖然這樣做并不符合最佳實(shí)踐), 只要你在使用前加載了該文件就行。你也可以在控制器的構(gòu)造函數(shù)里加載輔助函數(shù),從而在當(dāng)前控制器的任何方法里都可以使用, 或者在需要調(diào)用的方法里加載這個(gè)輔助函數(shù)。

注解

輔助函數(shù)的加載方法并不會(huì)返回值,所以請(qǐng)不要嘗試將它賦值給一個(gè)變量。請(qǐng)如上所示調(diào)用即可。
URL輔助函數(shù)文件總是會(huì)自動(dòng)加載,因此你不需要手動(dòng)加載它。

從非標(biāo)準(zhǔn)位置加載

輔助函數(shù)文件可以從app/Helpers目錄和system/Helpers目錄外被加載, 只要它們所處的路徑可以通過(guò) 自動(dòng)加載器配置文件 中的PSR-4這節(jié)所配置的命名空間定位。 你可以為輔助函數(shù)文件用命名空間作為前綴來(lái)起名,從而使其可被定位。在命名空間所處的目錄下,加載器期望該文件存在于命名空間中一個(gè)名為 Helpers 的子目錄下。 以下是一個(gè)幫助理解的例子。

舉例來(lái)說(shuō),假設(shè)我們把所有博客相關(guān)的代碼都放在了我們的命名空間 Example\Blog 中。而文件存在于我們服務(wù)器的/Modules/Blog/命名空間下。 那么我們就應(yīng)該把博客模塊對(duì)應(yīng)的輔助文件放在/Modules/Blog/Helpers/命名空間里。blog_helper 文件就應(yīng)該位于/Modules/Blog/Helpers/blog_helper.php的位置。 在控制器中我們可以使用如下指令來(lái)加載該輔助文件:

  helper('Modules\Blog\blog');

注解

通過(guò)該方式加載的文件中包含的函數(shù)并不是真正帶有命名空間的。這里的命名空間只是用于簡(jiǎn)單快捷地定位文件而已。

使用一個(gè)輔助函數(shù)

當(dāng)你加載完包含有你想要使用的輔助函數(shù)的文件后,就可以像調(diào)用一個(gè)標(biāo)準(zhǔn)的PHP函數(shù)一樣調(diào)用它。

舉例來(lái)說(shuō),在你的視圖文件中使用 anchor 函數(shù)來(lái)創(chuàng)建一個(gè)鏈接,可以這樣做:

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

其中”Click Here”是鏈接名,而”blogs/comments”是你希望鏈接到的控制器/方法名所對(duì)應(yīng)的的URI

“繼承”輔助函數(shù)

為了實(shí)現(xiàn)對(duì)輔助函數(shù)文件的”繼承”,在你的app/Helpers/ 目錄下創(chuàng)建一個(gè)和現(xiàn)存的輔助函數(shù)文件同名的文件。

如果你你想做的只是對(duì)已有的輔助函數(shù)文件加一些新功能——那么在里面加一兩個(gè)函數(shù)或者改某個(gè)特殊的輔助函數(shù)的代碼—— 比起用你的版本來(lái)完全替換整個(gè)輔助函數(shù)文件來(lái)說(shuō)要實(shí)用的多。在這種情況下,最好只是”繼承”這個(gè)輔助函數(shù)文件。

注解

“繼承”這個(gè)詞語(yǔ)在這里用起來(lái)太過(guò)于泛化了,因?yàn)檩o助函數(shù)是面向過(guò)程且離散的,并不能像傳統(tǒng)的場(chǎng)景一樣被繼承。在這種情況下,這里的 繼承 的意思是,讓你可以添加或替換原本的輔助文件所提供的函數(shù)。

舉個(gè)例子,為了繼承原生的 數(shù)組輔助函數(shù),你可以創(chuàng)建一個(gè)名為 app/Helpers/array_helper.php 的文件并增加或重載以下函數(shù):

  // any_in_array() 并不是數(shù)組輔助函數(shù),因?yàn)楸欢x為一個(gè)新的函數(shù)
  function any_in_array($needle, $haystack)
  {
          $needle = is_array($needle) ? $needle : [$needle];


          foreach ($needle as $item)
          {
                  if (in_array($item, $haystack))
                  {
                          return TRUE;
                  }
          }


          return FALSE;
  }


  // random_element() 在數(shù)組輔助函數(shù)中被定義了,所以在這里重載了原生的函數(shù)
  function random_element($array)
  {
          shuffle($array);
          return array_pop($array);
  }

helper() 方法會(huì)掃描所有 app/Config/Autoload.php 里定義的PSR-4命名空間并同時(shí)加載所有匹配的輔助文件 這一行為將使得所有模塊的輔助文件都會(huì)被加載,包括所有你所創(chuàng)建用于該程序的對(duì)應(yīng)輔助文件。加載順序如下:

  1. app/Helpers - 這里的文件總是首先被加載
  2. {namespace}/Helpers - 所有的命名空間都會(huì)通過(guò)所定義的順序遍歷
  3. system/Helpers - 系統(tǒng)輔助文件在最后加載

然后呢?

在內(nèi)容表里你可以找到所有可用的輔助函數(shù)文件。請(qǐng)逐一瀏覽它們的用途吧。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)