CodeIgniter - 基本概念



控制器

控制器是一個簡單的類檔案。顧名思義,它透過 URI 控制整個應用程式。

建立控制器

首先,轉到application/controllers資料夾。您將在那裡找到兩個檔案,index.htmlWelcome.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."; 
      } 
   } 
?>

我們可以透過以下三種方式執行上述控制器 -

在瀏覽器中訪問第一個 URI 後,我們得到如下所示的輸出。正如您所看到的,我們得到了“index”方法的輸出,即使我們沒有在 URI 中傳遞方法的名稱。我們只在 URI 中使用了控制器名稱。在這種情況下,CodeIgniter 呼叫預設方法“index”。

Index output

在瀏覽器中訪問第二個 URI,我們得到與上圖相同的輸出。在這裡,我們在 URI 中控制器名稱之後傳遞了方法的名稱。由於方法的名稱是“index”,因此我們得到了相同的輸出。

在瀏覽器中訪問第三個 URI,我們得到如下所示的輸出。正如您所看到的,我們得到了“hello”方法的輸出,因為我們在 URI 中控制器名稱“test”之後傳遞了“hello”作為方法名稱。

Hello Output

需要記住的要點

  • 控制器類的名稱必須以大寫字母開頭。

  • 控制器必須以小寫字母呼叫。

  • 不要使用與父類相同的方法名稱,因為它會覆蓋父類的方法。

檢視

這可以是一個簡單或複雜的網頁,可以透過控制器呼叫。網頁可能包含標題、頁尾、側邊欄等。檢視不能直接呼叫。讓我們建立一個簡單的檢視。在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'); 
      } 
   } 
?>

以下是上述程式碼的輸出 -

Test output

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

Flow Chart

模型

模型類旨在處理資料庫中的資訊。例如,如果您使用 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/helpersapplication/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”方法。

廣告