CodeIgniter 加載器類

2018-07-21 15:39 更新

加載器類

加載器,顧名思義,是用于加載元素的,加載的元素可以是庫(kù)(類),視圖文件 , 驅(qū)動(dòng)器 ,輔助函數(shù) , 模型 或其他你自己的文件。

注解

該類由系統(tǒng)自動(dòng)加載,你無(wú)需手工加載。

應(yīng)用程序"包"

應(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ù):

  • $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

該方法用于加載核心類。

注解

我們有時(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ù):

  • $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

該方法用于加載驅(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 (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

該方法用于加載你的視圖文件。如果你尚未閱讀本手冊(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ù):

  • $vars (mixed) -- An array of variables or a single variable name
  • $val (mixed) -- Optional variable value

返回: 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ù):

  • $key (string) -- Variable name key

返回: 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ù):

  • $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');

如果你的模型位于子目錄下,加載時(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ù):

  • $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

該方法用于加載數(shù)據(jù)庫(kù)類,有兩個(gè)可選的參數(shù)。 更多信息,請(qǐng)閱讀 數(shù)據(jù)庫(kù) 。

dbforge([$db = NULL[, $return = FALSE]])

參數(shù):

  • $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

加載 數(shù)據(jù)庫(kù)工廠類 ,更多信息,請(qǐng)參考該頁(yè)面。

dbutil([$db = NULL[, $return = FALSE]])

參數(shù):

  • $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

加載 數(shù)據(jù)庫(kù)工具類 ,更多信息,請(qǐng)參考該頁(yè)面。

helper($helpers)

參數(shù):

  • $helpers (mixed) -- Helper name as a string or an array containing multiple helpers

返回: CI_Loader instance (method chaining)

返回類型: CI_Loader

該方法用于加載輔助函數(shù)文件,其中 file_name 為加載的文件名,不帶 _helper.php 后綴。

file($path[, $return = FALSE])

參數(shù):

  • $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

這是一個(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ù):

  • $files (mixed) -- Language file name or an array of multiple language files
  • $lang (string) -- Language name

返回: CI_Loader instance (method chaining)

返回類型: CI_Loader

該方法是 語(yǔ)言加載方法 $this->lang->load() 的一個(gè)別名。

config($file[, $use_sections = FALSE[, $fail_gracefully = FALSE]])

參數(shù):

  • $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

該方法是 配置文件加載方法 $this->config->load() 的一個(gè)別名。

is_loaded($class)

參數(shù):

  • $class (string) -- Class name

返回: 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ù):

  • $path (string) -- Path to add
  • $view_cascade (bool) -- Whether to use cascading views

返回: 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ù):

  • $path (string) -- Path to remove

返回: 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ù):

  • $include_base (bool) -- Whether to include BASEPATH

返回: An array of package paths

返回類型: array

返回當(dāng)前所有可用的包路徑。

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)