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