# 加載器類
加載器,顧名思義,是用于加載元素的,加載的元素可以是庫(類),[視圖文件](http://codeigniter.org.cn/user_guide/general/views.html)?,?[驅動器](http://codeigniter.org.cn/user_guide/general/drivers.html)?,[輔助函數](http://codeigniter.org.cn/user_guide/general/helpers.html)?,?[模型](http://codeigniter.org.cn/user_guide/general/models.html)?或其他你自己的文件。
注解
該類由系統自動加載,你無需手工加載。
* [應用程序"包"](http://codeigniter.org.cn/user_guide/libraries/loader.html#id2)
* [包的視圖文件](http://codeigniter.org.cn/user_guide/libraries/loader.html#id3)
* [類參考](http://codeigniter.org.cn/user_guide/libraries/loader.html#id4)
## [應用程序"包"](http://codeigniter.org.cn/user_guide/libraries/loader.html#id6)
應用程序包(Package)可以很便捷的將你的應用部署在一個獨立的目錄中, 以實現自己整套的類庫,模型,輔助函數,配置,文件和語言包。 建議將這些應用程序包放置在 application/third_party 目錄下。 下面是一個簡單應用程序包的目錄結構。
下面是一個名為 "Foo Bar" 的應用程序包目錄的例子。
~~~
/application/third_party/foo_bar
config/
helpers/
language/
libraries/
models/
~~~
無論應用程序包是為了實現什么樣的目的,它都包含了屬于自己的配置文件、 輔助函數、語言包、類庫和模型。如果要在你的控制器里使用這些資源, 你首先需要告知加載器(Loader)從應用程序包加載資源,使用?add_package_path()?方法來添加包的路徑。
### [包的視圖文件](http://codeigniter.org.cn/user_guide/libraries/loader.html#id7)
默認情況下,當調用?add_package_path()?方法時,包的視圖文件路徑就設置好了。 視圖文件的路徑是通過一個循環來查找的,一旦找到第一個匹配的即加載該視圖。
在這種情況下,它可能在包內產生視圖命名沖突,并可能導致加載錯誤的包。 為了確保不會發生此類問題,在調用?add_package_path()?方法時, 可以將可選的第二個參數設置為 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
~~~
## [類參考](http://codeigniter.org.cn/user_guide/libraries/loader.html#id8)
classCI_Loader
library($library[,?$params = NULL[,?$object_name = NULL]])
參數:
* **$library**?(mixed) -- Library name as a string or an array with multiple libraries
* **$params**?(array) -- Optional array of parameters to pass to the loaded library's constructor
* **$object_name**?(string) -- Optional object name to assign the library to
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
該方法用于加載核心類。
注解
我們有時候說 "類" ,有時候說 "庫" ,這兩個詞不做區分。
例如,如果你想使用 CodeIgniter 發送郵件,第一步就是在控制器中加載 email 類:
~~~
$this->load->library('email');
~~~
加載完之后,email 類就可以使用?$this->email?來訪問使用了。
類庫文件可以被保存到主 libraries 目錄的子目錄下面,或者保存到個人的?application/libraries?目錄下。要載入子目錄下的文件,只需將路徑包含進來就可以了,注意這里說的路徑是指相對于 libraries 目錄的路徑。 例如,當你有一個文件保存在下面這個位置:
~~~
libraries/flavors/Chocolate.php
~~~
你應該使用下面的方式來載入它:
~~~
$this->load->library('flavors/chocolate');
~~~
你可以隨心所欲地將文件保存到多層的子目錄下。
另外,你可以同時加載多個類,只需給 library 方法傳入一個包含所有要載入的類名的數組即可::
~~~
$this->load->library(array('email', 'table'));
~~~
**設置選項**
第二個參數是可選的,用于選擇性地傳遞配置參數。一般來說,你可以將參數以數組的形式傳遞過去:
~~~
$config = array (
'mailtype' => 'html',
'charset' => 'utf-8,
'priority' => '1'
);
$this->load->library('email', $config);
~~~
配置參數通常也可以保存在一個配置文件中,在每個類庫自己的頁面中有詳細的說明, 所以在使用類庫之前,請認真閱讀說明。
請注意,當第一個參數使用數組來同時載入多個類時,每個類將獲得相同的參數信息。
**給類庫分配不同的對象名**
第三個參數也是可選的,如果為空,類庫通常就會被賦值給一個與類庫同名的對象。 例如,如果類庫名為 Calendar ,它將會被賦值給一個名為$this->calendar?的變量。
如果你希望使用你的自定義名稱,你可以通過第三個參數把它傳遞過去:
~~~
$this->load->library('calendar', NULL, 'my_calendar');
// Calendar class is now accessed using:
$this->my_calendar
~~~
請注意,當第一個參數使用數組來同時載入多個類時,第三個參數將不起作用。
driver($library[,?$params = NULL[,?$object_name]])
參數:
* **$library**?(mixed) -- Library name as a string or an array with multiple libraries
* **$params**?(array) -- Optional array of parameters to pass to the loaded library's constructor
* **$object_name**?(string) -- Optional object name to assign the library to
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
該方法用于加載驅動器類,和?library()?方法非常相似。
例如,如果你想在 CodeIgniter 中使用會話,第一步就是在控制器中加載 session 驅動器:
~~~
$this->load->driver('session');
~~~
加載完之后,session 驅動器就可以使用?$this->session?來訪問使用了。
驅動器文件可以被保存到主 libraries 目錄的子目錄下面,或者保存到個人的?application/libraries?目錄下。子目錄的名稱必須和驅動器父類的名稱一致,你可以閱讀?[驅動器](http://codeigniter.org.cn/user_guide/general/drivers.html)?了解詳細信息。
另外,你可以同時加載多個驅動器,只需給 driver 方法傳入一個包含所有要載入的驅動器名的數組即可::
~~~
$this->load->driver(array('session', 'cache'));
~~~
**設置選項**
第二個參數是可選的,用于選擇性地傳遞配置參數。一般來說,你可以將參數以數組的形式傳遞過去:
~~~
$config = array(
'sess_driver' => 'cookie',
'sess_encrypt_cookie' => true,
'encryption_key' => 'mysecretkey'
);
$this->load->driver('session', $config);
~~~
配置參數通常也可以保存在一個配置文件中,在每個類庫自己的頁面中有詳細的說明, 所以在使用類庫之前,請認真閱讀說明。
**給類庫分配不同的對象名**
第三個參數也是可選的,如果為空,驅動器通常就會被賦值給一個與它同名的對象。 例如,如果驅動器名為 Session ,它將會被賦值給一個名為$this->session?的變量。
如果你希望使用你的自定義名稱,你可以通過第三個參數把它傳遞過去:
~~~
$this->load->driver('session', '', 'my_session');
// Session class is now accessed using:
$this->my_session
~~~
view($view[,?$vars = array()[,?return = FALSE]])
參數:
* **$view**?(string) -- View name
* **$vars**?(array) -- An associative array of variables
* **$return**?(bool) -- Whether to return the loaded view
返回:View content string if $return is set to TRUE, otherwise CI_Loader instance (method chaining)
返回類型: mixed
該方法用于加載你的視圖文件。如果你尚未閱讀本手冊的?[視圖](http://codeigniter.org.cn/user_guide/general/views.html)?章節的話,建議你先去閱讀那里的內容,會有更詳細的函數使用說明。
第一個參數是必須的,指定你要載入的視圖文件的名稱。
注解
無需加上 .php 擴展名,除非你使用了其他的擴展名。
第二個參數是**可選的**,允許你傳入一個數組或對象參數,傳入的參數將使用 PHP 的?[extract()](http://php.net/extract)?函數進行提取,提取出來的變量可以在視圖中使用。 再說一遍,請閱讀?[視圖](http://codeigniter.org.cn/user_guide/general/views.html)?章節了解該功能的更多用法。
第三個參數是**可選的**,用于改變方法的行為,將數據以字符串的形式返回, 而不是發送給瀏覽器。當你希望對數據進行一些特殊處理時,這個參數就非常有用。 如果你將這個參數設置為 TRUE,方法就會返回數據。這個參數的默認值是 FALSE, 也就是數據將會被發送給瀏覽器。如果你希望數據被返回,記得要將它賦值給一個變量:
~~~
$string = $this->load->view('myfile', '', TRUE);
~~~
vars($vars[,?$val = ''])
參數:
* **$vars**?(mixed) -- An array of variables or a single variable name
* **$val**?(mixed) -- Optional variable value
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
這個方法以一個關聯數組作為輸入參數,將這個數組用 PHP 的?[extract()](http://php.net/extract)?函數轉化成與之對應的變量。這個方法的結果與上面的$this->load->view()?方法使用第二個參數的結果一樣。 假如你想在控制器的構造函數中定義一些全局變量,并希望這些變量在控制器的 每一個方法加載的視圖文件中都可用,這種情況下你可能想單獨使用這個函數。 你可以多次調用該方法,數據將被緩存,并被合并為一個數組,以便轉換成變量。
get_var($key)
參數:
* **$key**?(string) -- Variable name key
返回: Value if key is found, NULL if not
返回類型: mixed
該方法檢查關聯數組中的變量對你的視圖是否可用。當一個變量在一個類 或者控制器的另一個方法里被以這樣的方式定義時:$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]])
參數:
* **$model**?(mixed) -- Model name or an array containing multiple models
* **$name**?(string) -- Optional object name to assign the model to
* **$db_conn**?(string) -- Optional database configuration group to load
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
~~~
$this->load->model('model_name');
~~~
如果你的模型位于子目錄下,加載時將路徑包含進來即可。例如, 如果你有一個模型位于?application/models/blog/Queries.php?, 你可以使用下面的方法來加載:
~~~
$this->load->model('blog/queries');
~~~
如果你希望將你的模型賦值給一個不同的變量,你可以在第二個參數中指定:
~~~
$this->load->model('model_name', 'fubar');
$this->fubar->method();
~~~
database([$params = ''[,?$return = FALSE[,?$query_builder = NULL]]])
參數:
* **$params**?(mixed) -- Database group name or configuration options
* **$return**?(bool) -- Whether to return the loaded database object
* **$query_builder**?(bool) -- Whether to load the Query Builder
返回: Loaded CI_DB instance or FALSE on failure if $return is set to TRUE, otherwise CI_Loader instance (method chaining)
返回類型: mixed
該方法用于加載數據庫類,有兩個可選的參數。 更多信息,請閱讀?[數據庫](http://codeigniter.org.cn/user_guide/database/index.html)?。
dbforge([$db = NULL[,?$return = FALSE]])
參數:
* **$db**?(object) -- Database object
* **$return**?(bool) -- Whether to return the Database Forge instance
返回: Loaded CI_DB_forge instance if $return is set to TRUE, otherwise CI_Loader instance (method chaining)
返回類型: mixed
加載?[數據庫工廠類](http://codeigniter.org.cn/user_guide/database/forge.html)?,更多信息,請參考該頁面。
dbutil([$db = NULL[,?$return = FALSE]])
參數:
* **$db**?(object) -- Database object
* **$return**?(bool) -- Whether to return the Database Utilities instance
返回: Loaded CI_DB_utility instance if $return is set to TRUE, otherwise CI_Loader instance (method chaining)
返回類型: mixed
加載?[數據庫工具類](http://codeigniter.org.cn/user_guide/database/utilities.html)?,更多信息,請參考該頁面。
helper($helpers)
參數:
* **$helpers**?(mixed) -- Helper name as a string or an array containing multiple helpers
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
該方法用于加載輔助函數文件,其中 file_name 為加載的文件名,不帶 _helper.php 后綴。
file($path[,?$return = FALSE])
參數:
* **$path**?(string) -- File path
* **$return**?(bool) -- Whether to return the loaded file
返回: File contents if $return is set to TRUE, otherwise CI_Loader instance (method chaining)
返回類型: mixed
這是一個通用的文件載入方法,在第一個參數中給出文件所在的路徑和文件名, 將會打開并讀取對應的文件。默認情況下,數據會被發送給瀏覽器, 就如同視圖文件一樣,但如果你將第二個參數設置為 TRUE , 那么數據就會以字符串的形式被返回,而不是發送給瀏覽器。
language($files[,?$lang = ''])
參數:
* **$files**?(mixed) -- Language file name or an array of multiple language files
* **$lang**?(string) -- Language name
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
該方法是?[語言加載方法](http://codeigniter.org.cn/user_guide/libraries/language.html)?$this->lang->load()?的一個別名。
config($file[,?$use_sections = FALSE[,?$fail_gracefully = FALSE]])
參數:
* **$file**?(string) -- Configuration file name
* **$use_sections**?(bool) -- Whether configuration values should be loaded into their own section
* **$fail_gracefully**?(bool) -- Whether to just return FALSE in case of failure
返回: TRUE on success, FALSE on failure
返回類型: bool
該方法是?[配置文件加載方法](http://codeigniter.org.cn/user_guide/libraries/config.html)?$this->config->load()?的一個別名。
is_loaded($class)
參數:
* **$class**?(string) -- Class name
返回: Singleton property name if found, FALSE if not
返回類型: mixed
用于檢查某個類是否已經被加載。
注解
這里的類指的是類庫和驅動器。
如果類已經被加載,方法返回它在 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])
|參數:
* **$path**?(string) -- Path to add
* **$view_cascade**?(bool) -- Whether to use cascading views
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
添加一個包路徑,用于告訴加載器類使用給定的路徑來加載后續請求的資源。 例如,"Foo Bar" 應用程序包里有一個名為 Foo_bar.php 的類,在控制器中, 我們可以按照如下的方法調用:
~~~
$this->load->add_package_path(APPPATH.'third_party/foo_bar/')
->library('foo_bar');
~~~
remove_package_path([$path = ''])
參數:
* **$path**?(string) -- Path to remove
返回: CI_Loader instance (method chaining)
返回類型: CI_Loader
當你的控制器完成從應用程序包中讀取資源,如果你還需要讀取其他的應用程序包的資源, 你會希望刪除當前使用的包路徑來讓加載器不再使用這個文件夾中的資源。 要刪除最后一次使用的包路徑,你可以直接不帶參數的調用該方法。
或者你也可以刪除一個特定的包路徑,指定與之前使用?add_package_path()?方法時 所加載的包相同的路徑:
~~~
$this->load->remove_package_path(APPPATH.'third_party/foo_bar/');
~~~
get_package_paths([$include_base = TRUE])
參數:
* **$include_base**?(bool) -- Whether to include BASEPATH
返回: An array of package paths
返回類型: array
返回當前所有可用的包路徑。
- 歡迎使用 CodeIgniter
- 安裝說明
- 下載 CodeIgniter
- 安裝說明
- 從老版本升級
- 疑難解答
- CodeIgniter 概覽
- CodeIgniter 將從這里開始
- CodeIgniter 是什么?
- 支持特性
- 應用程序流程圖
- 模型-視圖-控制器
- 設計與架構目標
- 教程 - 內容提要
- 加載靜態內容
- 讀取新聞條目
- 創建新聞條目
- 結束語
- 常規主題
- CodeIgniter URL
- 控制器
- 保留名稱
- 視圖
- 模型
- 輔助函數
- 使用 CodeIgniter 類庫
- 創建類庫
- 使用 CodeIgniter 驅動器
- 創建驅動器
- 創建核心系統類
- 創建附屬類
- 鉤子 - 擴展框架核心
- 自動加載資源
- 公共函數
- 兼容性函數
- URI 路由
- 錯誤處理
- 網頁緩存
- 程序分析
- 以 CLI 方式運行
- 管理你的應用程序
- 處理多環境
- 在視圖文件中使用 PHP 替代語法
- 安全
- PHP 開發規范
- 類庫參考
- 基準測試類
- 緩存驅動器
- 日歷類
- 購物車類
- 配置類
- Email 類
- 加密類
- 加密類(新版)
- 文件上傳類
- 表單驗證類
- FTP 類
- 圖像處理類
- 輸入類
- Javascript 類
- 語言類
- 加載器類
- 遷移類
- 輸出類
- 分頁類
- 模板解析類
- 安全類
- Session 類
- HTML 表格類
- 引用通告類
- 排版類
- 單元測試類
- URI 類
- 用戶代理類
- XML-RPC 與 XML-RPC 服務器類
- Zip 編碼類
- 數據庫參考
- 數據庫快速入門: 示例代碼
- 數據庫配置
- 連接你的數據庫
- 查詢
- 生成查詢結果
- 查詢輔助函數
- 查詢構造器類
- 事務
- 數據庫元數據
- 自定義函數調用
- 數據庫緩存類
- 數據庫工廠類
- 數據庫工具類
- 數據庫驅動器參考
- 輔助函數參考
- 數組輔助函數
- 驗證碼輔助函數
- Cookie 輔助函數
- 日期輔助函數
- 目錄輔助函數
- 下載輔助函數
- 郵件輔助函數
- 文件輔助函數
- 表單輔助函數
- HTML 輔助函數
- 語言輔助函數
- Inflector 輔助函數
- 數字輔助函數
- 路徑輔助函數
- 安全輔助函數
- 表情輔助函數
- 字符串輔助函數
- 文本輔助函數
- 排版輔助函數
- URL 輔助函數
- XML 輔助函數
- 向 CodeIgniter 貢獻你的力量