多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php框架 > codeigniter > [PHP]CodeIgniter學(xué)習(xí)手冊(cè)(一):控制器Controller的介紹與使用

[PHP]CodeIgniter學(xué)習(xí)手冊(cè)(一):控制器Controller的介紹與使用

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-03-05 00:15:08 閱讀次數(shù):3983次
控制器的簡(jiǎn)單介紹
簡(jiǎn)而言之,一個(gè)控制器就是一個(gè)類文件,是以一種能夠和 URI 關(guān)聯(lián)在一起的方式來(lái)命名的。
假設(shè)這個(gè) URI:
example.com/index.php/blog/
在上面的例子中,CodeIgniter 將嘗試尋找并裝載一個(gè)名為 blog.php 的控制器。
當(dāng)控制器的名字匹配 URI 的第一段時(shí),它將被裝載。

來(lái)一個(gè)Hello World!

我們來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的控制器,以便更直觀地了解其工作原理。使用你的文本編輯器,創(chuàng)建一個(gè)名為 blog.php 的文件,然后輸入下列代碼:
<?php class Blog extends CI_Controller { 	function __construct() { 		parent::__construct(); 	}		public function index() {		echo 'Hello World!'; 	}} ?>


然后保存文件到 application/controllers/ 文件夾。
現(xiàn)在使用類似這樣的 URL 訪問(wèn)你的站點(diǎn):
example.com/index.php/blog/
如果你做的沒(méi)錯(cuò),你應(yīng)該看到Hello World!.
注意:類名必須以大寫字母開(kāi)頭。換句話說(shuō),這是有效的:

<?phpclass Blog extends CI_Controller {}?>

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

<?phpclass blog extends CI_Controller {}?>

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

控制器中方法的含義
上面的例子中用到的方法名是 index()。如果 URI 的第二部分為空的話,會(huì)默認(rèn)載入 “index” 方法。也可以將地址寫成這樣來(lái)訪問(wèn) “Hello World”:
example.com/index.php/blog/index/

URI 的第二部分是用來(lái)決定調(diào)用控制器中哪個(gè)方法的。
我們?cè)賮?lái)試試。在你的控制器中加入一個(gè)新的方法:
<?php class Blog extends CI_Controller {	function __construct() { 		parent::__construct(); 	} 		public function index() { 		echo 'Hello World!'; 	} 		public function comments() {		echo '看這里!'; 	}}?>

現(xiàn)在在地址欄中輸入下面的內(nèi)容來(lái)訪問(wèn) comments 方法:
example.com/index.php/blog/comments/

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


將 URI 片段傳遞給方法
如果你的 URI 超過(guò)兩個(gè)部分,那么超過(guò)的將被作為參數(shù)傳遞給方法。
舉例來(lái)說(shuō),如果你的 URI 是這樣的:
example.com/index.php/products/shoes/sandals/123
URI 的第3和第4部分會(huì)被傳遞給你的方法(“sandals” 和 “123”):
<?phpclass 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ù)了!
<?phpclass Products extends CI_Controller {    public function shoes($sandals='Test', $id=1)    {        echo $sandals;        echo $id;    }}?>

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


定義默認(rèn)控制器
當(dāng)你的網(wǎng)站不存在某個(gè)URI 或者 用戶直接從根目錄訪問(wèn)的時(shí)候,CodeIgniter 會(huì)加載默認(rèn)控制器。打開(kāi) application/config/routes.php 文件來(lái)設(shè)置默認(rèn)控制器:
$route['default_controller'] = 'Blog';

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


重新定義方法的調(diào)用規(guī)則
如上所述,URI 的第二片段決定會(huì)調(diào)用控制器中的哪個(gè)方法。CodeIgniter 允許你使用 _remap() 方法來(lái)廢除這種規(guī)則:
public function _remap(){    // Some code here...}

注意:如果你的控制器中包含一個(gè)名為 _remap() 的方法,那么不管你的 URI 中包含什么,它總會(huì)被忽略掉。這個(gè)方法會(huì)廢除掉由 URI 片段來(lái)決定哪個(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è)輸出類用來(lái)確保你修改的數(shù)據(jù)會(huì)自動(dòng)被傳遞給瀏覽器。關(guān)于這個(gè)的更多信息可以在視圖和輸出類里找到。有些時(shí)候,你可能想要自己發(fā)布修改一些最終的數(shù)據(jù)或是自己把它傳遞給瀏覽器。CodeIgniter 允許你給你的控制器增加一個(gè)名為 _output() 的方法來(lái)接收最終的數(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ù)可以這樣來(lái)寫:

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)谳敵鲱悈⒂每捎玫姆椒ǎ瑏?lái)控制輸出以使其在任何最終進(jìn)程完成之前執(zhí)行。


私有方法

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

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

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



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

如果你在建立一個(gè)大型的應(yīng)用程序,你會(huì)發(fā)現(xiàn) CodeIgniter 可以很方便的將控制器放到一些子文件夾中。
只要在 application/controllers 目錄下創(chuàng)建文件夾并放入你的控制器就可以了。
注意:  如果你要使用某個(gè)子文件夾下的功能,就要保證 URI 的第一個(gè)片段是用于描述這個(gè)文件夾的。例如說(shuō)你有一個(gè)控制器在這里:
application/controllers/products/shoes.php
調(diào)用這個(gè)控制器的時(shí)候你的 URI 要這么寫:
example.com/index.php/products/shoes/show/123

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

CodeIgniter 也允許你使用 URI 路由 功能來(lái)重新定向 URI。



構(gòu)造函數(shù)
如果要在你的任意控制器中使用構(gòu)造函數(shù)的話,那么必須在里面加入下面這行代碼:
parent::__construct();
這行代碼的必要性在于,你此處的構(gòu)造函數(shù)會(huì)覆蓋掉這個(gè)父控制器類中的構(gòu)造函數(shù),所以我們要手動(dòng)調(diào)用它。
<?phpclass 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ù)并不能返回值,但是可以用來(lái)設(shè)置一些默認(rèn)的功能。
已保留的方法名稱

因?yàn)槟闾砑拥目刂破黝惱^承了主要的應(yīng)用程序控制器,所以你要小心你的方法名不要和那個(gè)類中的方法名一樣了,否則你的方法會(huì)覆蓋原有的。詳細(xì)信息請(qǐng)查看保留字部分。
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 性videos另类hdwww | 一本久草 | 俺来色 | 欧美午夜毛片a级在线 | 亚洲欧美日韩精品中文乱码 | 国产高清一区 | 亚洲网站在线播放 | 国产福利免费看 | 自拍视频国产 | 亚洲福利视频一区二区 | 亚洲精品高清视频 | 最近中文字幕mv在线高清 | 成人福利片 | 中国老头gay高清xxxx | 欧美特级午夜一区二区三区 | 国产福利资源在线 | 欧美巨大video粗暴 | 欧美a色爱欧美综合v | 国产美女无遮挡免费视频网站 | 亚洲 日本 欧美 日韩精品 | 在线观看精品国产福利片100 | 欧美老人巨大xxxx做受视频 | 欧美福利视频在线 | 日韩中文字幕视频在线 | 国产精品永久免费视频观看 | 久久毛片免费看 | 国产在线一区二区三区 | 亚洲成人在线视频 | 亚洲品质自拍视频 | 手机在线免费视频 | 亚洲美女激情视频 | 99久久综合给久久精品 | 一二三四在线手机观看视频 | 麻豆亚洲 | 久久精品一区二区三区不卡 | 国产精品热久久毛片 | 国产精品久久久久久 | 麻豆免费版在线观看 | 日本亚州在线播放精品 | 精久久| 美国福利片 |