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

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > codeigniter > [PHP]CodeIgniter學習手冊(一):控制器Controller的介紹與使用

[PHP]CodeIgniter學習手冊(一):控制器Controller的介紹與使用

來源:程序員人生   發布時間:2014-09-17 14:29:02 閱讀次數:3866次
控制器的簡單介紹
簡而言之,一個控制器就是一個類文件,是以一種能夠和 URI 關聯在一起的方式來命名的。
假設這個 URI:
example.com/index.php/blog/
在上面的例子中,CodeIgniter 將嘗試尋找并裝載一個名為 blog.php 的控制器。
當控制器的名字匹配 URI 的第一段時,它將被裝載。

來一個Hello World!

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


然后保存文件到 application/controllers/ 文件夾。
現在使用類似這樣的 URL 訪問你的站點:
example.com/index.php/blog/
如果你做的沒錯,你應該看到Hello World!.
注意:類名必須以大寫字母開頭。換句話說,這是有效的:

<?php class Blog extends CI_Controller { } ?>

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

<?php class blog extends CI_Controller { } ?>

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

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

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

現在在地址欄中輸入下面的內容來訪問 comments 方法:
example.com/index.php/blog/comments/

你應該看到新的信息了:看這里!


將 URI 片段傳遞給方法
如果你的 URI 超過兩個部分,那么超過的將被作為參數傳遞給方法。
舉例來說,如果你的 URI 是這樣的:
example.com/index.php/products/shoes/sandals/123
URI 的第3和第4部分會被傳遞給你的方法(“sandals” 和 “123”):
<?php class Products extends CI_Controller { public function shoes($sandals, $id) { echo $sandals; echo $id; } } ?>

上面的方法調用時必須給兩個相應的參數,要不然會出錯。當然你也可以像下面這樣寫,就不用在調用的時候給參數了!
<?php class Products extends CI_Controller { public function shoes($sandals='Test', $id=1) { echo $sandals; echo $id; } } ?>

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


定義默認控制器
當你的網站不存在某個URI 或者 用戶直接從根目錄訪問的時候,CodeIgniter 會加載默認控制器。打開 application/config/routes.php 文件來設置默認控制器:
$route['default_controller'] = 'Blog';

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


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

注意:如果你的控制器中包含一個名為 _remap() 的方法,那么不管你的 URI 中包含什么,它總會被忽略掉。這個方法會廢除掉由 URI 片段來決定哪個方法被調用的規則,允許你重新定義調用方法的規則(方法的路由規則)。
被重新定義的方法調用方式(一般是 URI 中的第二片段)將作為一個參數傳遞給 _remap() :

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

任何附加在該方法名稱之后的段都會被視為 _remap() 的第二個參數(可選)。這個可選的數組參數可以與PHP的call_user_func_array聯用,模擬CodeIgniter的默認行為。
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 擁有一個輸出類用來確保你修改的數據會自動被傳遞給瀏覽器。關于這個的更多信息可以在視圖和輸出類里找到。有些時候,你可能想要自己發布修改一些最終的數據或是自己把它傳遞給瀏覽器。CodeIgniter 允許你給你的控制器增加一個名為 _output() 的方法來接收最終的數據。
注意: 如果你的控制器包含一個 _output() 方法,那么它將總是被調用,而不是直接輸出最終的數據。這個方法類似于OO里的析構函數,不管你調用任何方法這個方法總是會被執行。
例如:

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

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

為了讓你的控制器輸出緩存正確, 它的 _output() 函數可以這樣來寫:

if ($this->output->cache_expiration > 0) { $this->output->_write_cache($output); }

如果您正在使用頁面執行時間和內存使用統計的功能,這可能不完全準確,因為他們不會考慮到你所做的任何進一步的動作。請在輸出類參用可用的方法,來控制輸出以使其在任何最終進程完成之前執行。


私有方法

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

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

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



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

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

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

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



構造函數
如果要在你的任意控制器中使用構造函數的話,那么必須在里面加入下面這行代碼:
parent::__construct();
這行代碼的必要性在于,你此處的構造函數會覆蓋掉這個父控制器類中的構造函數,所以我們要手動調用它。
<?php class Blog extends CI_Controller { public function __construct() { parent::__construct(); } } ?>

如果你需要設定某些默認的值或是在實例化類的時候運行一個默認的程序,那么構造函數在這方面就非常有用了。
構造函數并不能返回值,但是可以用來設置一些默認的功能。
已保留的方法名稱

因為你添加的控制器類繼承了主要的應用程序控制器,所以你要小心你的方法名不要和那個類中的方法名一樣了,否則你的方法會覆蓋原有的。詳細信息請查看保留字部分。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美高清在线精品一区二区不卡 | 波多久久夜色精品国产 | 亚洲精品久久一区二区无卡 | 国产精品欧美一区二区三区不卡 | 性欧美性free| 欧美日韩另类综合 | 国产欧美精品综合一区 | 精品视频一区二区三区在线观看 | 国产欧美一区二区三区免费 | 欧美三区在线观看 | 国产欧美久久久精品 | 免费看一级毛片欧美 | 欧美成人性色生活18黑人 | 特级做a爰片毛片免费看一区 | 一区二区高清视频在线观看 | 免费观看无遮挡www的小视频 | 九九精品免视看国产成人 | 在线a人片免费观看不卡 | 一区二区三区成人 | 亚洲欧洲日产国码在线观看 | 五月丁香六月综合缴清无码 | 国产一区精品视频 | 精品国产一区二区三区不卡在线 | 亚洲人成在线影院 | 国产亚洲精品热视频在线观看 | 91综合网 | 国产精品视频免费一区二区三区 | 亚洲在线偷拍自拍 | 在线久综合色手机在线播放 | 91成人免费福利网站在线 | 午夜dj在线观看免费视频 | 网站免费视频 | 欧美2区| 国产成人精品日本亚洲专区6 | 欧美激情精品久久久久久久 | 日韩二区 | 亚洲人网站 | 亚洲免费人成在线视频观看 | 亚洲福利专区 | 性短视频在线观看免费不卡流畅 | 2020久久精品永久免费 |