控制器
控制器是一個(gè)簡(jiǎn)單的類(lèi)文件。顧名思義,它通過(guò)uri控制整個(gè)應(yīng)用程序。
創(chuàng)建控制器
首先,轉(zhuǎn)到 application/controllers 文件夾。您會(huì)在那里找到兩個(gè)文件, index.html 和 welcome.php。這些文件隨 codeigniter 一起提供。
保持這些文件原樣。在同一路徑下創(chuàng)建一個(gè)名為" test.php"的新文件。在該文件中寫(xiě)入以下代碼:
class test extends ci_controller { public function index() { echo "hello world!"; } }
test 類(lèi)擴(kuò)展了一個(gè)名為 ci_controller 的內(nèi)置類(lèi)。每當(dāng)您想創(chuàng)建自己的 controller 類(lèi)時(shí),都必須擴(kuò)展該類(lèi)。
調(diào)用控制器
上面的控制器可以通過(guò) uri 調(diào)用,如下所示:
http://www.your-domain.com/index.php/test
注意上面 uri 中 index.php 后面的" test"這個(gè)詞。這表示控制器的類(lèi)名。正如我們已經(jīng)給出的控制器名稱(chēng)" test",我們?cè)趇ndex.php之后寫(xiě)" test"。類(lèi)名必須以 大寫(xiě)字母開(kāi)頭,但我們需要寫(xiě) 小寫(xiě)字母 當(dāng)我們通過(guò) uri 調(diào)用該控制器時(shí)。調(diào)用控制器的一般語(yǔ)法如下:
http://www.your-domain.com/index.php/controller/method-name
創(chuàng)建和調(diào)用構(gòu)造函數(shù)
讓我們修改上面的類(lèi)并創(chuàng)建另一個(gè)名為"hello"的方法。
class test extends ci_controller { public function index() { echo "this is default function."; } public function hello() { echo "this is hello function."; } }
我們可以通過(guò)以下三種方式執(zhí)行上述控制器:
- http://www.your-domain.com/index .php/test
- http://www.your-domain.com/index.php/test/index
- http://www.your-domain.com/index.php/test/hello
在瀏覽器中訪問(wèn)第一個(gè) uri 后,我們得到如下圖所示的輸出。如您所見(jiàn),我們得到了方法" index"的輸出,即使我們沒(méi)有將方法的名稱(chēng)傳遞給 uri。我們?cè)?uri 中只使用了控制器名稱(chēng)。在這種情況下,codeigniter 調(diào)用默認(rèn)方法" index"。
在瀏覽器中訪問(wèn)第二個(gè) uri,我們得到與上圖相同的輸出。在這里,我們?cè)?uri 中的控制器名稱(chēng)之后傳遞了方法名稱(chēng)。由于該方法的名稱(chēng)是" index",因此我們得到了相同的輸出。
在瀏覽器中訪問(wèn)第三個(gè) uri,我們得到如下圖所示的輸出。如您所見(jiàn),我們正在獲取方法" hello"的輸出,因?yàn)槲覀冊(cè)诳刂破髅Q(chēng)" test"在 uri 中。
要記住的要點(diǎn)
- 控制器類(lèi)的名稱(chēng)必須以大寫(xiě)字母開(kāi)頭。
- 必須使用小寫(xiě)字母調(diào)用控制器。
- 不要使用與父類(lèi)相同的方法名稱(chēng),因?yàn)樗鼤?huì)覆蓋父類(lèi)的功能。
觀看次數(shù)
這可以是簡(jiǎn)單或復(fù)雜的網(wǎng)頁(yè),可以由控制器調(diào)用。網(wǎng)頁(yè)可能包含頁(yè)眉、頁(yè)腳、側(cè)邊欄等。不能直接調(diào)用視圖。讓我們創(chuàng)建一個(gè)簡(jiǎn)單的視圖。在 application/views 下創(chuàng)建一個(gè)名為" test.php"的新文件,并將下面給定的代碼復(fù)制到該文件中。
codeigniter view example codeigniter view example
更改 application/controllers/test.php文件的代碼如下所示。
加載視圖
可以通過(guò)以下語(yǔ)法加載視圖:
$this->load->view('name');
其中 name 是正在渲染的視圖文件。如果您計(jì)劃將視圖文件存儲(chǔ)在某個(gè)目錄中,那么您可以使用以下語(yǔ)法:
$this->load->view('directory-name/name');
沒(méi)有必要將擴(kuò)展名指定為 php,除非使用了 .php 以外的內(nèi)容。
index() 方法正在調(diào)用 view 方法并將"test"作為參數(shù)傳遞給 view() 方法,因?yàn)槲覀円呀?jīng)將 html 編碼存儲(chǔ)在 下的"test.php"文件中>application/views/test.php.
class test extends ci_controller { public function index() { $this--->load->view('test'); } }
這是上面代碼的輸出:
以下流程圖說(shuō)明了一切是如何工作的:
模型
模型類(lèi)旨在處理數(shù)據(jù)庫(kù)中的信息。例如,如果您在應(yīng)用程序中使用 codeigniter 管理用戶,那么您必須有模型類(lèi),其中包含插入、刪除、更新和檢索用戶數(shù)據(jù)的函數(shù)。
創(chuàng)建模型類(lèi)
模型類(lèi)存儲(chǔ)在 application/models 目錄中。以下代碼展示了如何在 codeigniter 中創(chuàng)建模型類(lèi)。
class model_name extends ci_model { public function __construct() { parent::__construct(); } }
其中 model_name 是您要提供的模型類(lèi)的名稱(chēng)。每個(gè)模型類(lèi)都必須繼承 codeigniter 的 ci_model 類(lèi)。模型類(lèi)的第一個(gè)字母必須是大寫(xiě)字母。以下是用戶模型類(lèi)的代碼。
class user_model extends ci_model { public function __construct() { parent::__construct(); } }
以上模型類(lèi)必須保存為user_model.php。類(lèi)名和文件名必須相同。
加載模型
模型可以在控制器中調(diào)用。以下代碼可用于加載任何模型。
$this->load->model('model_name');
其中model_name 是要加載的模型的名稱(chēng)。加載模型后,您可以簡(jiǎn)單地調(diào)用其方法,如下所示。
$this->model_name->method();
自動(dòng)加載模型
在某些情況下,您可能需要在整個(gè)應(yīng)用程序中使用某個(gè)模型類(lèi)。在這種情況下,我們最好自動(dòng)加載它。
/* |--------------------------------------------------------------- | auto-load models |--------------------------------------------------------------- | prototype: | | $autoload['model'] = array('first_model', 'second_model'); | | you can also supply an alternative model name to be assigned | in the controller: | | $autoload['model'] = array('first_model' => 'first'); */ $autoload['model'] = array();
如上圖所示,在數(shù)組中傳入要自動(dòng)加載的模型名稱(chēng),系統(tǒng)會(huì)自動(dòng)加載,此時(shí)系統(tǒng)處于初始化狀態(tài),整個(gè)應(yīng)用程序都可以訪問(wèn)。
幫手
顧名思義,它將幫助您構(gòu)建系統(tǒng)。它被分成小功能以提供不同的功能。 codeigniter 中提供了許多幫助程序,如下表所示。我們也可以構(gòu)建自己的助手。
helper 通常存儲(chǔ)在您的 system/helpers 或 application/helpers 目錄中。自定義助手存儲(chǔ)在 application/helpers 目錄中,系統(tǒng)的助手存儲(chǔ)在 system/helpers 目錄中。 codeigniter 將首先查看您的 application/helpers 目錄。如果該目錄不存在或未找到指定的幫助程序,codeigniter 將改為查找您的全局 system/helpers/目錄。每個(gè)helper,無(wú)論是自定義的還是系統(tǒng)的helper,在使用前都必須加載。
名稱(chēng)和描述 |
array helper array helper 文件包含有助于處理數(shù)組的函數(shù)。 |
captcha helper captcha helper 文件包含有助于創(chuàng)建 captcha 圖像的功能。 |
cookie helper cookie helper 文件包含幫助處理 cookie 的函數(shù)。 |
date helper date helper 文件包含幫助您處理日期的函數(shù)。 |
directory helper directory helper 文件包含有助于處理目錄的函數(shù)。 |
download helper download helper可讓您將數(shù)據(jù)下載到桌面。 |
email helper email helper 提供了一些使用電子郵件的輔助功能。如需更強(qiáng)大的電子郵件解決方案,請(qǐng)參閱 codeigniter 的電子郵件類(lèi)。 |
file helper file helper 文件包含有助于處理文件的函數(shù)。 |
form helper form helper 文件包含幫助處理表單的函數(shù)。 |
html helper html helper 文件包含有助于處理 html 的函數(shù)。 |
inflector helper inflector helper 文件包含允許您將單詞更改為復(fù)數(shù)、單數(shù)、駝峰式等的功能。 |
language helper language helper 文件包含有助于處理語(yǔ)言文件的函數(shù)。 |
number helper number helper 文件包含幫助您處理數(shù)字?jǐn)?shù)據(jù)的函數(shù)。 |
path helper path helper 文件包含允許您使用服務(wù)器上的文件路徑的函數(shù)。 |
security helper security helper 文件包含安全相關(guān)的功能。 |
smiley helper smiley helper 文件包含可讓您管理笑臉(表情符號(hào))的功能。 |
string helper string helper 文件包含有助于處理字符串的函數(shù)。 |
text helper text helper 文件包含有助于處理文本的函數(shù)。 |
typography helper typography helper 文件包含的函數(shù)可以幫助您以語(yǔ)義相關(guān)的方式格式化文本。 |
url helper url helper 文件包含有助于處理 url 的函數(shù)。 |
xml helper xml helper 文件包含有助于處理 xml 數(shù)據(jù)的函數(shù)。 |
加載助手
可以如下所示加載幫助程序:
$this->load->helper('name');
其中 name 是助手的名稱(chēng)。例如,如果你想加載 url helper,那么它可以加載為:
$this->load->helper('url');
路由
codeigniter 具有用戶友好的 uri 路由系統(tǒng),讓您可以輕松地重新路由 url。通常,url 字符串與其對(duì)應(yīng)的控制器類(lèi)/方法之間存在一對(duì)一的關(guān)系。 uri 中的段通常遵循此模式:
your-domain.com/class/method/id/
- 第一段代表應(yīng)該被調(diào)用的控制器類(lèi)。
- 第二段表示應(yīng)該調(diào)用的類(lèi)函數(shù)或方法。
- 第三個(gè)和任何其他段,代表 id 和將傳遞給控制器??的任何變量。
在某些情況下,您可能希望更改此默認(rèn)路由機(jī)制。 codeigniter 提供了工具,您可以通過(guò)它來(lái)設(shè)置自己的路由規(guī)則。
自定義路由規(guī)則
有一個(gè)特定的文件可以處理所有這些。該文件位于 application/config/routes.php。您將找到一個(gè)名為 $route 的數(shù)組,您可以在其中自定義路由規(guī)則。 $route 數(shù)組中的鍵將決定路由的內(nèi)容,值將決定路由的位置。 codeigniter 中保留了三個(gè)路由。
reserved routes & description |
$route['default_controller'] 這個(gè)路由指示應(yīng)該加載哪個(gè)控制器類(lèi),如果uri不包含數(shù)據(jù),這將是這種情況人們加載您的根 url。鼓勵(lì)您使用默認(rèn)路由,否則默認(rèn)情況下會(huì)出現(xiàn) 404 頁(yè)面。我們可以在此處設(shè)置網(wǎng)站首頁(yè),以便默認(rèn)加載。 |
$route['404_override'] 此路由指示如果未找到請(qǐng)求的控制器,應(yīng)加載哪個(gè)控制器類(lèi)。它將覆蓋默認(rèn)的 404 錯(cuò)誤頁(yè)面。它不會(huì)影響 show_404() 函數(shù),該函數(shù)將繼續(xù)加載 中的默認(rèn) error_404.php 文件application/views/errors/error_404.php. |
$route['translate_uri_dashes'] 從布爾值可以看出,這并不完全是一條路線。此選項(xiàng)使您能夠在控制器和方法 uri 段中用下劃線自動(dòng)替換破折號(hào) (‘-‘),從而在需要時(shí)為您節(jié)省額外的路由條目。這是必需的,因?yàn)槠普厶?hào)不是有效的類(lèi)或方法名稱(chēng)字符,如果您嘗試使用它,將導(dǎo)致致命錯(cuò)誤。 |
可以通過(guò) 通配符或使用 正則表達(dá)式自定義路由,但請(qǐng)記住,這些自定義路由規(guī)則必須在保留規(guī)則之后。
通配符
我們可以使用兩個(gè)通配符,如下所述:
- (:num)-它將匹配僅包含數(shù)字的段。
- (:any)-它將匹配包含任何字符的段。
示例
$route['product/:num']='catalog/product_lookup';
在上面的示例中,如果在 url 的第一段中找到文字單詞"product",而在第二段中找到數(shù)字,則使用"catalog"類(lèi)和"product_lookup"方法代替。
正則表達(dá)式
和通配符一樣,我們也可以在 $route array key 部分使用正則表達(dá)式。如果任何 uri 與正則表達(dá)式匹配,那么它將被路由到設(shè)置到 $route 數(shù)組中的值部分。
示例
$route['products/([a-z]+)/(\d+)']='$1/id_$2';
在上面的示例中,類(lèi)似于 products/shoes/123 的 uri 將改為調(diào)用" shoes"控制器類(lèi)和" id_123"方法。