
- CodeIgniter 教程
- CodeIgniter - 首頁
- CodeIgniter - 概述
- CodeIgniter - 安裝 CodeIgniter
- CodeIgniter - 應用程式架構
- CodeIgniter - MVC 框架
- CodeIgniter - 基本概念
- CodeIgniter - 配置
- CodeIgniter - 使用資料庫
- CodeIgniter - 庫
- CodeIgniter - 錯誤處理
- CodeIgniter - 檔案上傳
- CodeIgniter - 傳送郵件
- CodeIgniter - 表單驗證
- CodeIgniter - 會話管理
- CodeIgniter - 快閃記憶體資料
- CodeIgniter - 臨時資料
- CodeIgniter - Cookie 管理
- CodeIgniter - 常用函式
- CodeIgniter - 頁面快取
- CodeIgniter - 頁面重定向
- CodeIgniter - 應用程式效能分析
- CodeIgniter - 基準測試
- CodeIgniter - 新增 JS 和 CSS
- CodeIgniter - 國際化
- CodeIgniter - 安全性
- CodeIgniter 有用資源
- CodeIgniter - 快速指南
- CodeIgniter - 有用資源
- CodeIgniter - 討論
CodeIgniter - 基本概念
控制器
控制器是一個簡單的類檔案。顧名思義,它透過 URI 控制整個應用程式。
建立控制器
首先,轉到application/controllers資料夾。您將在那裡找到兩個檔案,index.html和Welcome.php。這些檔案隨 CodeIgniter 一起提供。
保持這些檔案不變。在同一路徑下建立一個名為“Test.php”的新檔案。在該檔案中寫入以下程式碼 -
<?php class Test extends CI_Controller { public function index() { echo "Hello World!"; } } ?>
Test類擴充套件了一個名為CI_Controller的內建類。每當您想建立自己的控制器類時,都必須擴充套件此類。
呼叫控制器
可以透過以下 URI 呼叫上述控制器 -
http://www.your-domain.com/index.php/test
請注意上面 URI 中 index.php 之後的“test”字樣。這表示控制器的類名。由於我們給控制器命名為“Test”,因此我們在 index.php 之後寫“test”。類名必須以大寫字母開頭,但當我們透過 URI 呼叫該控制器時,需要寫小寫字母。呼叫控制器的通用語法如下 -
http://www.your-domain.com/index.php/controller/method-name
建立和呼叫建構函式方法
讓我們修改上面的類並建立一個名為“hello”的另一個方法。
<?php class Test extends CI_Controller { public function index() { echo "This is default function."; } public function hello() { echo "This is hello function."; } } ?>
我們可以透過以下三種方式執行上述控制器 -
- 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
在瀏覽器中訪問第一個 URI 後,我們得到如下所示的輸出。正如您所看到的,我們得到了“index”方法的輸出,即使我們沒有在 URI 中傳遞方法的名稱。我們只在 URI 中使用了控制器名稱。在這種情況下,CodeIgniter 呼叫預設方法“index”。

在瀏覽器中訪問第二個 URI,我們得到與上圖相同的輸出。在這裡,我們在 URI 中控制器名稱之後傳遞了方法的名稱。由於方法的名稱是“index”,因此我們得到了相同的輸出。
在瀏覽器中訪問第三個 URI,我們得到如下所示的輸出。正如您所看到的,我們得到了“hello”方法的輸出,因為我們在 URI 中控制器名稱“test”之後傳遞了“hello”作為方法名稱。

需要記住的要點
控制器類的名稱必須以大寫字母開頭。
控制器必須以小寫字母呼叫。
不要使用與父類相同的方法名稱,因為它會覆蓋父類的方法。
檢視
這可以是一個簡單或複雜的網頁,可以透過控制器呼叫。網頁可能包含標題、頁尾、側邊欄等。檢視不能直接呼叫。讓我們建立一個簡單的檢視。在application/views下建立一個名為“test.php”的新檔案,並將下面給出的程式碼複製到該檔案中。
<!DOCTYPE html> <html lang = "en"> <head> <meta charset = "utf-8"> <title>CodeIgniter View Example</title> </head> <body> CodeIgniter View Example </body> </html>
更改application/controllers/test.php檔案的程式碼,如下所示。
載入檢視
檢視可以透過以下語法載入 -
$this->load->view('name');
其中 name 是要呈現的檢視檔案。如果您計劃將檢視檔案儲存在某個目錄中,則可以使用以下語法 -
$this->load->view('directory-name/name');
除非使用了 .php 以外的其他副檔名,否則不必指定副檔名為 php。
index() 方法正在呼叫 view 方法並將“test”作為引數傳遞給 view() 方法,因為我們將 html 程式碼儲存在application/views/test.php下的“test.php”檔案中。
<?php class Test extends CI_Controller { public function index() { $this->load->view('test'); } } ?>
以下是上述程式碼的輸出 -

下圖說明了所有內容的工作原理 -

模型
模型類旨在處理資料庫中的資訊。例如,如果您使用 CodeIgniter 來管理應用程式中的使用者,那麼您必須擁有模型類,其中包含插入、刪除、更新和檢索使用者資料的函式。
建立模型類
模型類儲存在application/models目錄中。以下程式碼顯示瞭如何在 CodeIgniter 中建立模型類。
<?php Class Model_name extends CI_Model { Public function __construct() { parent::__construct(); } } ?>
其中 Model_name 是您要給定的模型類的名稱。每個模型類都必須繼承 CodeIgniter 的 CI_Model 類。模型類的第一個字母必須是大寫字母。以下是使用者模型類的程式碼。
<?php Class User_model extends CI_Model { Public function __construct() { parent::__construct(); } } ?>
上述模型類必須儲存為 User_model.php。類名和檔名必須相同。
載入模型
可以在控制器中呼叫模型。以下程式碼可用於載入任何模型。
$this->load->model('model_name');
其中 model_name 是要載入的模型的名稱。載入模型後,您可以簡單地呼叫其方法,如下所示。
$this->model_name->method();
自動載入模型
在某些情況下,您可能希望在整個應用程式中使用某些模型類。在這種情況下,如果我們自動載入它會更好。
/* | --------------------------------------------------------------- | 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();
如上圖所示,將要自動載入的模型的名稱傳遞到陣列中,它將在系統初始化狀態下自動載入,並在整個應用程式中可訪問。
輔助函式
顧名思義,它將幫助您構建系統。它被劃分為小的函式以提供不同的功能。CodeIgniter 中提供了許多輔助函式,如下表所示。我們也可以構建自己的輔助函式。
輔助函式通常儲存在您的system/helpers或application/helpers 目錄中。自定義輔助函式儲存在application/helpers目錄中,系統輔助函式儲存在system/helpers目錄中。CodeIgniter 將首先在您的application/helpers 目錄中查詢。如果目錄不存在或未找到指定的輔助函式,CodeIgniter 將改為查詢您的全域性system/helpers/ 目錄。每個輔助函式,無論是自定義輔助函式還是系統輔助函式,都必須在使用前載入。
序號 | 輔助函式名稱和描述 |
---|---|
1 | 陣列輔助函式 陣列輔助函式檔案包含有助於處理陣列的函式。 |
2 | CAPTCHA 輔助函式 CAPTCHA 輔助函式檔案包含有助於建立 CAPTCHA 影像的函式。 |
3 | Cookie 輔助函式 Cookie 輔助函式檔案包含有助於處理 Cookie 的函式。 |
4 | 日期輔助函式 日期輔助函式檔案包含幫助您處理日期的函式。 |
5 | 目錄輔助函式 目錄輔助函式檔案包含有助於處理目錄的函式。 |
6 | 下載輔助函式 下載輔助函式允許您將資料下載到您的桌面上。 |
7 | 電子郵件輔助函式 電子郵件輔助函式提供了一些輔助函式來處理電子郵件。有關更強大的電子郵件解決方案,請參閱 CodeIgniter 的電子郵件類。 |
8 | 檔案輔助函式 檔案輔助函式檔案包含有助於處理檔案的函式。 |
9 | 表單輔助函式 表單輔助函式檔案包含有助於處理表單的函式。 |
10 | HTML 輔助函式 HTML 輔助函式檔案包含有助於處理 HTML 的函式。 |
11 | Inflector 輔助函式 Inflector 輔助函式檔案包含允許您將單詞更改為複數、單數、駝峰式大小寫等的函式。 |
12 | 語言輔助函式 語言輔助函式檔案包含有助於處理語言檔案的函式。 |
13 | 數字輔助函式 數字輔助函式檔案包含幫助您處理數字資料的函式。 |
14 | 路徑輔助函式 路徑輔助函式檔案包含允許您處理伺服器上檔案路徑的函式。 |
15 | 安全輔助函式 安全輔助函式檔案包含與安全相關的函式。 |
16 | 表情輔助函式 表情輔助函式檔案包含允許您管理表情符號(表情)的函式。 |
17 | 字串輔助函式 字串輔助函式檔案包含有助於處理字串的函式。 |
18 | 文字輔助函式 文字輔助函式檔案包含有助於處理文字的函式。 |
19 | 排版輔助函式 排版輔助函式檔案包含幫助您以語義相關的方式格式化文字的函式。 |
20 | URL 輔助函式 URL 輔助函式檔案包含有助於處理 URL 的函式。 |
21 | XML 輔助函式 XML 輔助函式檔案包含有助於處理 XML 資料的函式。 |
載入輔助函式
輔助函式可以按如下方式載入 -
$this->load->helper('name');
其中 name 是輔助函式的名稱。例如,如果您要載入 URL 輔助函式,則可以按如下方式載入 -
$this->load->helper('url');
路由
CodeIgniter 具有使用者友好的 URI 路由系統,以便您可以輕鬆地重新路由 URL。通常,URL 字串與其對應的控制器類/方法之間存在一對一的關係。URI 中的段通常遵循以下模式 -
your-domain.com/class/method/id/
第一段表示應呼叫的控制器類。
第二段表示應呼叫的類函式或方法。
第三段以及任何其他段表示將傳遞給控制器的 ID 和任何變數。
在某些情況下,您可能希望更改此預設路由機制。CodeIgniter 提供了一個功能,您可以透過它設定自己的路由規則。
自定義路由規則
有一個特定的檔案可以處理所有這些。該檔案位於 application/config/routes.php。您會找到一個名為 $route 的陣列,您可以在其中自定義路由規則。$route 陣列中的鍵將決定路由什麼,而值將決定路由到哪裡。CodeIgniter 中有三個保留路由。
序號 | 保留路由及說明 |
---|---|
1 | $route['default_controller'] 此路由指示如果 URI 不包含任何資料,則應載入哪個控制器類,當用戶載入根 URL 時,就會出現這種情況。建議您設定預設路由,否則預設情況下將顯示 404 頁面。我們可以在此處設定網站的首頁,以便預設載入。 |
2 | $route['404_override'] 此路由指示如果未找到請求的控制器,則應載入哪個控制器類。它將覆蓋預設的 404 錯誤頁面。它不會影響 show_404() 函式,該函式將繼續載入application/views/errors/error_404.php 中的預設error_404.php 檔案。 |
3 | $route['translate_uri_dashes'] 從布林值可以看出,這並不完全是一個路由。此選項使您能夠自動將控制器和方法 URI 段中的連字元(“-”)替換為下劃線,因此如果您需要這樣做,可以節省額外的路由條目。這是必需的,因為連字元不是有效的類或方法名稱字元,如果您嘗試使用它,將導致致命錯誤。 |
路由可以透過萬用字元或使用正則表示式進行自定義,但請記住,這些自定義的路由規則必須位於保留規則之後。
萬用字元
我們可以使用如下所述的兩個萬用字元字元 -
(:num) - 它將匹配僅包含數字的段。
(:any) - 它將匹配包含任何字元的段。
示例
$route['product/:num']='catalog/product_lookup';
在上面的示例中,如果在 URL 的第一段中找到了文字“product”,並且在第二段中找到了一個數字,則使用“catalog”類和“product_lookup”方法代替。
正則表示式
與萬用字元類似,我們也可以在$route 陣列鍵部分使用正則表示式。如果任何 URI 與正則表示式匹配,則它將被路由到 $route 陣列中設定的值部分。
示例
$route['products/([a-z]+)/(\d+)']='$1/id_$2';
在上面的示例中,類似於 products/shoes/123 的 URI 將改為呼叫“shoes”控制器類和“id_123”方法。