W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
輔助函數(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/Helpers 或 app/Helpers directory 下。CodeIgniter首先會(huì)在 app/Helpers 目錄下進(jìn)行查找,但是如果該目錄不存在,或者指定的輔助函數(shù)文件不在當(dāng)前位置。 CI就會(huì)在你的全局 system/Helpers/ 目錄下進(jìn)行搜索。
可以使用如下方法來(lái)輕易地加載輔助文件:
helper('name');
其中 name 是輔助文件的文件名,并不需要帶有.php的文件擴(kuò)展名或者是”helper”這部分。
舉例來(lái)說(shuō),為了加載名為cookie_helper.php的Cookie輔助文件,你需要這樣做:
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)加載它。
輔助函數(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)單快捷地定位文件而已。
當(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í)現(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)輔助文件。加載順序如下:
在內(nèi)容表里你可以找到所有可用的輔助函數(shù)文件。請(qǐng)逐一瀏覽它們的用途吧。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: