加載器,顧名思義,是用于加載元素的,加載的元素可以是庫(kù)(類),視圖文件 , 驅(qū)動(dòng)器 ,輔助函數(shù) , 模型 或其他你自己的文件。
注解
該類由系統(tǒng)自動(dòng)加載,你無(wú)需手工加載。
應(yīng)用程序包(Package)可以很便捷的將你的應(yīng)用部署在一個(gè)獨(dú)立的目錄中, 以實(shí)現(xiàn)自己整套的類庫(kù),模型,輔助函數(shù),配置,文件和語(yǔ)言包。 建議將這些應(yīng)用程序包放置在 application/third_party 目錄下。 下面是一個(gè)簡(jiǎn)單應(yīng)用程序包的目錄結(jié)構(gòu)。
下面是一個(gè)名為 "Foo Bar" 的應(yīng)用程序包目錄的例子。
/application/third_party/foo_bar
config/
helpers/
language/
libraries/
models/
無(wú)論應(yīng)用程序包是為了實(shí)現(xiàn)什么樣的目的,它都包含了屬于自己的配置文件、 輔助函數(shù)、語(yǔ)言包、類庫(kù)和模型。如果要在你的控制器里使用這些資源, 你首先需要告知加載器(Loader)從應(yīng)用程序包加載資源,使用 add_package_path() 方法來(lái)添加包的路徑。
默認(rèn)情況下,當(dāng)調(diào)用 add_package_path() 方法時(shí),包的視圖文件路徑就設(shè)置好了。 視圖文件的路徑是通過(guò)一個(gè)循環(huán)來(lái)查找的,一旦找到第一個(gè)匹配的即加載該視圖。
在這種情況下,它可能在包內(nèi)產(chǎn)生視圖命名沖突,并可能導(dǎo)致加載錯(cuò)誤的包。 為了確保不會(huì)發(fā)生此類問(wèn)題,在調(diào)用 add_package_path() 方法時(shí), 可以將可選的第二個(gè)參數(shù)設(shè)置為 FALSE 。
$this->load->add_package_path(APPPATH.'my_app', FALSE);
$this->load->view('my_app_index'); // Loads
$this->load->view('welcome_message'); // Will not load the default welcome_message b/c the second param to add_package_path is FALSE
// Reset things
$this->load->remove_package_path(APPPATH.'my_app');
// Again without the second parameter:
$this->load->add_package_path(APPPATH.'my_app');
$this->load->view('my_app_index'); // Loads
$this->load->view('welcome_message'); // Loads
classCI_Loader
library($library[, $params = NULL[, $object_name = NULL]])
參數(shù):
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
該方法用于加載核心類。
注解
我們有時(shí)候說(shuō) "類" ,有時(shí)候說(shuō) "庫(kù)" ,這兩個(gè)詞不做區(qū)分。
例如,如果你想使用 CodeIgniter 發(fā)送郵件,第一步就是在控制器中加載 email 類:
$this->load->library('email');
加載完之后,email 類就可以使用 $this->email 來(lái)訪問(wèn)使用了。
類庫(kù)文件可以被保存到主 libraries 目錄的子目錄下面,或者保存到個(gè)人的 application/libraries 目錄下。要載入子目錄下的文件,只需將路徑包含進(jìn)來(lái)就可以了,注意這里說(shuō)的路徑是指相對(duì)于 libraries 目錄的路徑。 例如,當(dāng)你有一個(gè)文件保存在下面這個(gè)位置:
libraries/flavors/Chocolate.php
你應(yīng)該使用下面的方式來(lái)載入它:
$this->load->library('flavors/chocolate');
你可以隨心所欲地將文件保存到多層的子目錄下。
另外,你可以同時(shí)加載多個(gè)類,只需給 library 方法傳入一個(gè)包含所有要載入的類名的數(shù)組即可::
$this->load->library(array('email', 'table'));
設(shè)置選項(xiàng)
第二個(gè)參數(shù)是可選的,用于選擇性地傳遞配置參數(shù)。一般來(lái)說(shuō),你可以將參數(shù)以數(shù)組的形式傳遞過(guò)去:
$config = array (
'mailtype' => 'html',
'charset' => 'utf-8,
'priority' => '1'
);
$this->load->library('email', $config);
配置參數(shù)通常也可以保存在一個(gè)配置文件中,在每個(gè)類庫(kù)自己的頁(yè)面中有詳細(xì)的說(shuō)明, 所以在使用類庫(kù)之前,請(qǐng)認(rèn)真閱讀說(shuō)明。
請(qǐng)注意,當(dāng)?shù)谝粋€(gè)參數(shù)使用數(shù)組來(lái)同時(shí)載入多個(gè)類時(shí),每個(gè)類將獲得相同的參數(shù)信息。
給類庫(kù)分配不同的對(duì)象名
第三個(gè)參數(shù)也是可選的,如果為空,類庫(kù)通常就會(huì)被賦值給一個(gè)與類庫(kù)同名的對(duì)象。 例如,如果類庫(kù)名為 Calendar ,它將會(huì)被賦值給一個(gè)名為$this->calendar 的變量。
如果你希望使用你的自定義名稱,你可以通過(guò)第三個(gè)參數(shù)把它傳遞過(guò)去:
$this->load->library('calendar', NULL, 'my_calendar');
// Calendar class is now accessed using:
$this->my_calendar
請(qǐng)注意,當(dāng)?shù)谝粋€(gè)參數(shù)使用數(shù)組來(lái)同時(shí)載入多個(gè)類時(shí),第三個(gè)參數(shù)將不起作用。
driver($library[, $params = NULL[, $object_name]])
參數(shù):
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
該方法用于加載驅(qū)動(dòng)器類,和 library() 方法非常相似。
例如,如果你想在 CodeIgniter 中使用會(huì)話,第一步就是在控制器中加載 session 驅(qū)動(dòng)器:
$this->load->driver('session');
加載完之后,session 驅(qū)動(dòng)器就可以使用 $this->session 來(lái)訪問(wèn)使用了。
驅(qū)動(dòng)器文件可以被保存到主 libraries 目錄的子目錄下面,或者保存到個(gè)人的 application/libraries 目錄下。子目錄的名稱必須和驅(qū)動(dòng)器父類的名稱一致,你可以閱讀 驅(qū)動(dòng)器 了解詳細(xì)信息。
另外,你可以同時(shí)加載多個(gè)驅(qū)動(dòng)器,只需給 driver 方法傳入一個(gè)包含所有要載入的驅(qū)動(dòng)器名的數(shù)組即可::
$this->load->driver(array('session', 'cache'));
設(shè)置選項(xiàng)
第二個(gè)參數(shù)是可選的,用于選擇性地傳遞配置參數(shù)。一般來(lái)說(shuō),你可以將參數(shù)以數(shù)組的形式傳遞過(guò)去:
$config = array(
'sess_driver' => 'cookie',
'sess_encrypt_cookie' => true,
'encryption_key' => 'mysecretkey'
);
$this->load->driver('session', $config);
配置參數(shù)通常也可以保存在一個(gè)配置文件中,在每個(gè)類庫(kù)自己的頁(yè)面中有詳細(xì)的說(shuō)明, 所以在使用類庫(kù)之前,請(qǐng)認(rèn)真閱讀說(shuō)明。
給類庫(kù)分配不同的對(duì)象名
第三個(gè)參數(shù)也是可選的,如果為空,驅(qū)動(dòng)器通常就會(huì)被賦值給一個(gè)與它同名的對(duì)象。 例如,如果驅(qū)動(dòng)器名為 Session ,它將會(huì)被賦值給一個(gè)名為$this->session 的變量。
如果你希望使用你的自定義名稱,你可以通過(guò)第三個(gè)參數(shù)把它傳遞過(guò)去:
$this->load->driver('session', '', 'my_session');
// Session class is now accessed using:
$this->my_session
view($view[, $vars = array()[, return = FALSE]])
參數(shù):
返回:View content string if $return is set to TRUE, otherwise CI_Loader instance (method chaining)
返回類型: mixed
該方法用于加載你的視圖文件。如果你尚未閱讀本手冊(cè)的 視圖 章節(jié)的話,建議你先去閱讀那里的內(nèi)容,會(huì)有更詳細(xì)的函數(shù)使用說(shuō)明。
第一個(gè)參數(shù)是必須的,指定你要載入的視圖文件的名稱。
注解
無(wú)需加上 .php 擴(kuò)展名,除非你使用了其他的擴(kuò)展名。
第二個(gè)參數(shù)是可選的,允許你傳入一個(gè)數(shù)組或?qū)ο髤?shù),傳入的參數(shù)將使用 PHP 的 extract() 函數(shù)進(jìn)行提取,提取出來(lái)的變量可以在視圖中使用。 再說(shuō)一遍,請(qǐng)閱讀 視圖 章節(jié)了解該功能的更多用法。
第三個(gè)參數(shù)是可選的,用于改變方法的行為,將數(shù)據(jù)以字符串的形式返回, 而不是發(fā)送給瀏覽器。當(dāng)你希望對(duì)數(shù)據(jù)進(jìn)行一些特殊處理時(shí),這個(gè)參數(shù)就非常有用。 如果你將這個(gè)參數(shù)設(shè)置為 TRUE,方法就會(huì)返回?cái)?shù)據(jù)。這個(gè)參數(shù)的默認(rèn)值是 FALSE, 也就是數(shù)據(jù)將會(huì)被發(fā)送給瀏覽器。如果你希望數(shù)據(jù)被返回,記得要將它賦值給一個(gè)變量:
$string = $this->load->view('myfile', '', TRUE);
vars($vars[, $val = ''])
參數(shù):
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
這個(gè)方法以一個(gè)關(guān)聯(lián)數(shù)組作為輸入?yún)?shù),將這個(gè)數(shù)組用 PHP 的 extract() 函數(shù)轉(zhuǎn)化成與之對(duì)應(yīng)的變量。這個(gè)方法的結(jié)果與上面的$this->load->view() 方法使用第二個(gè)參數(shù)的結(jié)果一樣。 假如你想在控制器的構(gòu)造函數(shù)中定義一些全局變量,并希望這些變量在控制器的 每一個(gè)方法加載的視圖文件中都可用,這種情況下你可能想單獨(dú)使用這個(gè)函數(shù)。 你可以多次調(diào)用該方法,數(shù)據(jù)將被緩存,并被合并為一個(gè)數(shù)組,以便轉(zhuǎn)換成變量。
get_var($key)
參數(shù):
返回: Value if key is found, NULL if not
返回類型: mixed
該方法檢查關(guān)聯(lián)數(shù)組中的變量對(duì)你的視圖是否可用。當(dāng)一個(gè)變量在一個(gè)類 或者控制器的另一個(gè)方法里被以這樣的方式定義時(shí):$this->load->vars(), 會(huì)做這樣的檢查。
get_vars()
返回: An array of all assigned view variables
返回類型: array
該方法返回所有對(duì)視圖可用的變量。
clear_vars()
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
清除緩存的視圖變量。
model($model[, $name = ''[, $db_conn = FALSE]])
參數(shù):
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
$this->load->model('model_name');
如果你的模型位于子目錄下,加載時(shí)將路徑包含進(jìn)來(lái)即可。例如, 如果你有一個(gè)模型位于 application/models/blog/Queries.php , 你可以使用下面的方法來(lái)加載:
$this->load->model('blog/queries');
如果你希望將你的模型賦值給一個(gè)不同的變量,你可以在第二個(gè)參數(shù)中指定:
$this->load->model('model_name', 'fubar');
$this->fubar->method();
database([$params = ''[, $return = FALSE[, $query_builder = NULL]]])
參數(shù):
返回: Loaded CI_DB instance or FALSE on failure if $return is set to TRUE, otherwise CI_Loader instance (method chaining)
返回類型: mixed
該方法用于加載數(shù)據(jù)庫(kù)類,有兩個(gè)可選的參數(shù)。 更多信息,請(qǐng)閱讀 數(shù)據(jù)庫(kù) 。
dbforge([$db = NULL[, $return = FALSE]])
參數(shù):
返回: Loaded CI_DB_forge instance if $return is set to TRUE, otherwise CI_Loader instance (method chaining)
返回類型: mixed
加載 數(shù)據(jù)庫(kù)工廠類 ,更多信息,請(qǐng)參考該頁(yè)面。
dbutil([$db = NULL[, $return = FALSE]])
參數(shù):
返回: Loaded CI_DB_utility instance if $return is set to TRUE, otherwise CI_Loader instance (method chaining)
返回類型: mixed
加載 數(shù)據(jù)庫(kù)工具類 ,更多信息,請(qǐng)參考該頁(yè)面。
helper($helpers)
參數(shù):
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
該方法用于加載輔助函數(shù)文件,其中 file_name 為加載的文件名,不帶 _helper.php 后綴。
file($path[, $return = FALSE])
參數(shù):
返回: File contents if $return is set to TRUE, otherwise CI_Loader instance (method chaining)
返回類型: mixed
這是一個(gè)通用的文件載入方法,在第一個(gè)參數(shù)中給出文件所在的路徑和文件名, 將會(huì)打開(kāi)并讀取對(duì)應(yīng)的文件。默認(rèn)情況下,數(shù)據(jù)會(huì)被發(fā)送給瀏覽器, 就如同視圖文件一樣,但如果你將第二個(gè)參數(shù)設(shè)置為 TRUE , 那么數(shù)據(jù)就會(huì)以字符串的形式被返回,而不是發(fā)送給瀏覽器。
language($files[, $lang = ''])
參數(shù):
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
該方法是 語(yǔ)言加載方法 $this->lang->load() 的一個(gè)別名。
config($file[, $use_sections = FALSE[, $fail_gracefully = FALSE]])
參數(shù):
返回: TRUE on success, FALSE on failure
返回類型: bool
該方法是 配置文件加載方法 $this->config->load() 的一個(gè)別名。
is_loaded($class)
參數(shù):
返回: Singleton property name if found, FALSE if not
返回類型: mixed
用于檢查某個(gè)類是否已經(jīng)被加載。
注解
這里的類指的是類庫(kù)和驅(qū)動(dòng)器。
如果類已經(jīng)被加載,方法返回它在 CodeIgniter 超級(jí)對(duì)象中被賦值的變量的名稱, 如果沒(méi)有加載,返回 FALSE:
$this->load->library('form_validation');
$this->load->is_loaded('Form_validation'); // returns 'form_validation'
$this->load->is_loaded('Nonexistent_library'); // returns FALSE
重要
如果你有類的多個(gè)實(shí)例(被賦值給多個(gè)不同的屬性),那么將返回第一個(gè)的名稱。
$this->load->library('form_validation', $config, 'fv');
$this->load->library('form_validation');
$this->load->is_loaded('Form_validation'); // returns 'fv'
add_package_path($path[, $view_cascade = TRUE])
|參數(shù):
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
添加一個(gè)包路徑,用于告訴加載器類使用給定的路徑來(lái)加載后續(xù)請(qǐng)求的資源。 例如,"Foo Bar" 應(yīng)用程序包里有一個(gè)名為 Foo_bar.php 的類,在控制器中, 我們可以按照如下的方法調(diào)用:
$this->load->add_package_path(APPPATH.'third_party/foo_bar/')
->library('foo_bar');
remove_package_path([$path = ''])
參數(shù):
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
當(dāng)你的控制器完成從應(yīng)用程序包中讀取資源,如果你還需要讀取其他的應(yīng)用程序包的資源, 你會(huì)希望刪除當(dāng)前使用的包路徑來(lái)讓加載器不再使用這個(gè)文件夾中的資源。 要?jiǎng)h除最后一次使用的包路徑,你可以直接不帶參數(shù)的調(diào)用該方法。
或者你也可以刪除一個(gè)特定的包路徑,指定與之前使用 add_package_path() 方法時(shí) 所加載的包相同的路徑:
$this->load->remove_package_path(APPPATH.'third_party/foo_bar/');
get_package_paths([$include_base = TRUE])
參數(shù):
返回: An array of package paths
返回類型: array
返回當(dāng)前所有可用的包路徑。
更多建議: