亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

direktori cari
歡迎 目錄 快速參考圖 基本信息 服務(wù)器要求 許可協(xié)議 變更記錄 關(guān)于CodeIgniter 安裝 下載 CodeIgniter 安裝指導(dǎo) 從老版本升級(jí) 疑難解答 介紹 開始 CodeIgniter 是什么? CodeIgniter 速記表 支持特性 應(yīng)用程序流程圖 模型-視圖-控制器 架構(gòu)目標(biāo) 教程 內(nèi)容提要 加載靜態(tài)內(nèi)容 創(chuàng)建新聞條目 讀取新聞條目 結(jié)束語(yǔ) 常規(guī)主題 CodeIgniter URL 控制器 保留字 視圖 模型 輔助函數(shù) 使用 CodeIgniter 類庫(kù) 創(chuàng)建你自己的類庫(kù) 使用 CodeIgniter 適配器 創(chuàng)建適配器 創(chuàng)建核心系統(tǒng)類 鉤子 - 擴(kuò)展框架的核心 自動(dòng)裝載資源 公共函數(shù) URI 路由 錯(cuò)誤處理 緩存 調(diào)試應(yīng)用程序 以CLI方式運(yùn)行 管理應(yīng)用程序 處理多環(huán)境 PHP替代語(yǔ)法 安全 開發(fā)規(guī)范 類庫(kù)參考 基準(zhǔn)測(cè)試類 日歷類 購(gòu)物車類 配置類 Email 類 加密類 文件上傳類 表單驗(yàn)證詳解 FTP 類 圖像處理類 輸入類 Javascript 類 語(yǔ)言類 裝載類 遷移類 輸出類 分頁(yè)類 模板解析器類 安全類 Session 類 HTML 表格類 引用通告類 排版類 單元測(cè)試類 URI 類 User-Agent 類 表單驗(yàn)證 XML-RPC 和 XML-RPC 服務(wù)器 Zip 編碼類 緩存適配器 適配器參考 適配器 數(shù)據(jù)庫(kù)類 Active Record 類 數(shù)據(jù)庫(kù)緩存類 自定義函數(shù)調(diào)用 數(shù)據(jù)庫(kù)配置 連接你的數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)快速入門例子代碼 字段數(shù)據(jù) 數(shù)據(jù)庫(kù)維護(hù)類 查詢輔助函數(shù) 數(shù)據(jù)庫(kù)類 查詢 生成查詢記錄集 表數(shù)據(jù) 事務(wù) 數(shù)據(jù)庫(kù)工具類 JavaScript類 輔助函數(shù)參考 數(shù)組輔助函數(shù) CAPTCHA 輔助函數(shù) Cookie Helper 日期輔助函數(shù) 目錄輔助函數(shù) 下載輔助函數(shù) Email 輔助函數(shù) 文件輔助函數(shù) 表單輔助函數(shù) HTML輔助函數(shù) Inflector 輔助函數(shù) 語(yǔ)言輔助函數(shù) 數(shù)字輔助函數(shù) 路徑輔助函數(shù) 安全輔助函數(shù) 表情輔助函數(shù) 字符串輔助函數(shù) 文本輔助函數(shù) 排版輔助函數(shù) URL 輔助函數(shù) XML 輔助函數(shù)
watak

CodeIgniter 用戶指南 版本 2.1.0

編輯文檔、查看近期更改請(qǐng) 登錄 或 注冊(cè)  找回密碼
查看原文

控制器

控制器是應(yīng)用程序的心臟,因?yàn)樗鼈儧Q定如何處理 HTTP 請(qǐng)求。

  • 什么是控制器?
  • Hello World
  • 方法
  • 將 URI 片段傳遞給方法
  • 定義一個(gè)默認(rèn)控制器
  • 重新定義方法的調(diào)用規(guī)則
  • 控制數(shù)據(jù)輸出
  • 私有方法
  • 如何將控制器放入子文件夾中
  • 構(gòu)造函數(shù)
  • 已保留的方法名稱

什么是控制器?

簡(jiǎn)而言之,一個(gè)控制器就是一個(gè)類文件,是以一種能夠和 URI 關(guān)聯(lián)在一起的方式來命名的。

假設(shè)這個(gè) URI:

example.com/index.php/blog/

在上面的例子中,CodeIgniter 將嘗試尋找并裝載一個(gè)名為 blog.php 的控制器。

當(dāng)控制器的名字匹配 URI 的第一段時(shí),它將被裝載。

讓我們?cè)囋嚳?? Hello World!

我們來創(chuàng)建一個(gè)簡(jiǎn)單的控制器,以便更直觀地了解其工作原理。使用你的文本編輯器,創(chuàng)建一個(gè)名為 blog.php 的文件,然后輸入下列代碼:

然后保存文件到 application/controllers/ 文件夾。

現(xiàn)在使用類似這樣的 URL 訪問你的站點(diǎn):

example.com/index.php/blog/

如果你做的沒錯(cuò),你應(yīng)該看到Hello World!.

注意:類名必須以大寫字母開頭。換句話說,這是有效的:

<?php
class Blog extends CI_Controller {

}
?>

下面的blog首字母b小寫,是屬于無效的寫法:

<?php
class blog extends CI_Controller {

}
?>

同時(shí),始終確保你的控制器擴(kuò)展自父控制器類,以便它能夠繼承其所有的方法。

方法

上面的例子中用到的方法名是 index()。如果 URI 的第二部分為空的話,會(huì)默認(rèn)載入 “index” 方法。也可以將地址寫成這樣來訪問 “Hello World”:

example.com/index.php/blog/index/

URI 的第二部分是用來決定調(diào)用控制器中哪個(gè)方法的。

我們?cè)賮碓囋?。在你的控制器中加入一個(gè)新的方法:

現(xiàn)在在地址欄中輸入下面的內(nèi)容來訪問 comments 方法:

example.com/index.php/blog/comments/

你應(yīng)該看到新的信息了:看這里!

將 URI 片段傳遞給方法

如果你的 URI 超過兩個(gè)部分,那么超過的將被作為參數(shù)傳遞給方法。

舉例來說,如果你的 URI 是這樣的:

example.com/index.php/products/shoes/sandals/123

URI 的第3和第4部分會(huì)被傳遞給你的方法(“sandals” 和 “123”):

<?php
class Products extends CI_Controller {

????public function shoes($sandals, $id)
????{
????????echo $sandals;
????????echo $id;
????}
}
?>

上面的方法調(diào)用時(shí)必須給兩個(gè)相應(yīng)的參數(shù),要不然會(huì)出錯(cuò)。當(dāng)然你也可以像下面這樣寫,就不用在調(diào)用的時(shí)候給參數(shù)了!

<?php
class Products extends CI_Controller {

????public function shoes($sandals='Test', $id=1)
????{
????????echo $sandals;
????????echo $id;
????}
}
?>

注意:如果你使用 URI 路由特性,則傳遞到方法中的 URI 片段將被重新路由一次。

定義默認(rèn)控制器

當(dāng)你的網(wǎng)站沒有設(shè)置 URI 或者直接從根目錄訪問的時(shí)候,CodeIgniter 會(huì)加載默認(rèn)控制器。打開 application/config/routes.php 文件來設(shè)置默認(rèn)控制器:

$route['default_controller'] = 'Blog';

這里的 Blog 就是你希望使用的控制器的名字。如果此時(shí)你不指定任何 URI 片段來訪問你的主頁(yè)就會(huì)看到默認(rèn)的“Hello World”信息。

重新定義方法的調(diào)用規(guī)則

如上所述,URI 的第二片段決定會(huì)調(diào)用控制器中的哪個(gè)方法。CodeIgniter 允許你使用 _remap() 方法來廢除這種規(guī)則:

public function _remap()
{
????// Some code here...
}

注意:如果你的控制器中包含一個(gè)名為 _remap() 的方法,那么不管你的 URI 中包含什么,它總會(huì)被忽略掉。這個(gè)方法會(huì)廢除掉由 URI 片段來決定哪個(gè)方法被調(diào)用的規(guī)則,允許你重新定義調(diào)用方法的規(guī)則(方法的路由規(guī)則)。

被重新定義的方法調(diào)用方式(一般是 URI 中的第二片段)將作為一個(gè)參數(shù)傳遞給 _remap()

public function _remap($method)
{
????if ($method == 'some_method')
????{
????????$this->$method();
????}
????else
????{
????????$this->comments();
????}
}

任何附加在該方法名稱之后的段都會(huì)被視為 _remap() 的第二個(gè)參數(shù)(可選)。這個(gè)可選的數(shù)組參數(shù)可以與PHP的call_user_func_array聯(lián)用,模擬CodeIgniter的默認(rèn)行為。

public function _remap($method, $params = array())
{
????$method = 'process_'.$method;
????if (method_exists($this, $method))
????{
????????return call_user_func_array(array($this, $method), $params);
????}
????show_404();
}

處理輸出

CodeIgniter 擁有一個(gè)輸出類用來確保你修改的數(shù)據(jù)會(huì)自動(dòng)被傳遞給瀏覽器。關(guān)于這個(gè)的更多信息可以在視圖和輸出類里找到。有些時(shí)候,你可能想要自己發(fā)布修改一些最終的數(shù)據(jù)或是自己把它傳遞給瀏覽器。CodeIgniter 允許你給你的控制器增加一個(gè)名為 _output() 的方法來接收最終的數(shù)據(jù)。

注意:?如果你的控制器包含一個(gè) _output() 方法,那么它將總是被調(diào)用,而不是直接輸出最終的數(shù)據(jù)。這個(gè)方法類似于OO里的析構(gòu)函數(shù),不管你調(diào)用任何方法這個(gè)方法總是會(huì)被執(zhí)行。

例如:

public function _output($output)
{
????echo $output;
}

請(qǐng)注意,你的 _output() 將接收最終的數(shù)據(jù)。 Benchmark和內(nèi)存的使用率數(shù)據(jù)將被渲染,緩存文件會(huì)被寫入(如果已啟用緩存),并且 HTTP 頭也將被發(fā)送(如果您使用該功能),然后交給 _output() 函數(shù)。

為了讓你的控制器輸出緩存正確, 它的 _output() 函數(shù)可以這樣來寫:
if ($this->output->cache_expiration > 0)
{
????$this->output->_write_cache($output);
}
如果您正在使用頁(yè)面執(zhí)行時(shí)間和內(nèi)存使用統(tǒng)計(jì)的功能,這可能不完全準(zhǔn)確,因?yàn)樗麄儾粫?huì)考慮到你所做的任何進(jìn)一步的動(dòng)作。請(qǐng)?jiān)谳敵鲱悈⒂每捎玫姆椒ǎ瑏砜刂戚敵鲆允蛊湓谌魏巫罱K進(jìn)程完成之前執(zhí)行。

私有方法

在某些情況下,你可能想要隱藏一些方法使之無法對(duì)外查閱。將方法私有化很簡(jiǎn)單,只要在方法名字前面加一個(gè)下劃線(“_”)做前綴就無法通過 URL 訪問到了。例如,如果你有一個(gè)像這樣的方法:

private function _utility()
{
??// some code
}

那么,通過下面這樣的 URL 進(jìn)行訪問是無法訪問到的:

example.com/index.php/blog/_utility/

如何將控制器放入子文件夾中

如果你在建立一個(gè)大型的應(yīng)用程序,你會(huì)發(fā)現(xiàn) CodeIgniter 可以很方便的將控制器放到一些子文件夾中。

只要在 application/controllers 目錄下創(chuàng)建文件夾并放入你的控制器就可以了。

注意:? 如果你要使用某個(gè)子文件夾下的功能,就要保證 URI 的第一個(gè)片段是用于描述這個(gè)文件夾的。例如說你有一個(gè)控制器在這里:

application/controllers/products/shoes.php

調(diào)用這個(gè)控制器的時(shí)候你的 URI 要這么寫:

example.com/index.php/products/shoes/show/123

你的每個(gè)子文件夾中需要包含一個(gè)默認(rèn)的控制器,這樣如果 URI 中只有子文件夾而沒有具體功能的時(shí)候它將被調(diào)用。只要將你作為默認(rèn)的控制器名稱在 application/config/routes.php 文件中指定就可以了。

CodeIgniter 也允許你使用 URI 路由 功能來重新定向 URI。

構(gòu)造函數(shù)

如果要在你的任意控制器中使用構(gòu)造函數(shù)的話,那么必須在里面加入下面這行代碼:

parent::__construct();

這行代碼的必要性在于,你此處的構(gòu)造函數(shù)會(huì)覆蓋掉這個(gè)父控制器類中的構(gòu)造函數(shù),所以我們要手動(dòng)調(diào)用它。

<?php
class Blog extends CI_Controller {

???????public function __construct()
???????{
????????????parent::__construct();
???????}
}
?>

如果你需要設(shè)定某些默認(rèn)的值或是在實(shí)例化類的時(shí)候運(yùn)行一個(gè)默認(rèn)的程序,那么構(gòu)造函數(shù)在這方面就非常有用了。
構(gòu)造函數(shù)并不能返回值,但是可以用來設(shè)置一些默認(rèn)的功能。

已保留的方法名稱

因?yàn)槟闾砑拥目刂破黝惱^承了主要的應(yīng)用程序控制器,所以你要小心你的方法名不要和那個(gè)類中的方法名一樣了,否則你的方法會(huì)覆蓋原有的。詳細(xì)信息請(qǐng)查看保留字部分。

就這樣了!

OK,總的來說,這就是關(guān)于控制器的所有內(nèi)容了。

?

翻譯貢獻(xiàn)者: 34333432, alsove, ashmodeus, bin_live, dawenxi123, hewenxiang, Hex, irini, liuyanghejerry, li_star, longjianghu, lp_ci, vvchuanqi, zhangqianxun
最后修改: 2012-03-07 11:19:19
Artikel sebelumnya: Artikel seterusnya: