0 關注者

Scaffolding

建立、讀取、更新和刪除 (CRUD) 是應用程式中資料物件的四個基本操作。由於實作 CRUD 操作在開發 Web 應用程式時非常常見,Yii 提供了一些名為 Gii 的程式碼產生工具,可以自動化此流程(也稱為scaffolding)來幫助我們。

注意: Gii 自 1.1.2 版本起可用。在此之前,您必須使用 yiic shell 工具 來達成相同的任務。

在接下來的內容中,我們將描述如何使用此工具來為我們的部落格應用程式中的文章和留言實作 CRUD 操作。

1. 安裝 Gii

我們首先需要安裝 Gii。開啟檔案 /wwwroot/blog/protected/config/main.php 並加入以下程式碼

return array(
    ......
    'import'=>array(
        'application.models.*',
        'application.components.*',
    ),
 
    'modules'=>array(
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'pick up a password here',
        ),
    ),
);

上述程式碼安裝了一個名為 gii 的模組,這使我們能夠透過在瀏覽器中訪問以下 URL 來存取 Gii 模組

http://www.example.com/blog/index.php?r=gii

系統將提示您輸入密碼。輸入我們先前在 /wwwroot/blog/protected/config/main.php 中設定的密碼,您應該會看到一個頁面,其中列出了所有可用的程式碼產生工具。

注意: 在生產機器上執行時,應移除上述程式碼。程式碼產生工具應僅在開發機器上使用。

2. 建立模型

我們首先需要為每個資料庫表格建立一個 模型 類別。模型類別將允許我們以直觀的物件導向方式存取資料庫,我們將在本教學稍後看到。

點擊 Model Generator 連結以開始使用模型產生工具。

Model Generator 頁面上,在 Table Name 欄位中輸入 tbl_user(使用者表格名稱),在 Table Prefix 欄位中輸入 tbl_,然後按下 Preview 按鈕。將會顯示一個預覽表格。我們可以點擊表格中的連結來預覽要產生的程式碼。如果一切正常,我們可以按下 Generate 按鈕來產生程式碼並將其儲存到檔案中。

資訊: 由於程式碼產生器需要將產生的程式碼儲存到檔案中,因此需要 Web 程序具有建立和修改相應檔案的權限。為了簡化起見,我們可以給予 Web 程序對整個 /wwwroot/blog 目錄的寫入權限。請注意,這僅在使用 Gii 的開發機器上才需要。

針對其餘的資料庫表格重複相同的步驟,包括 tbl_posttbl_commenttbl_tagtbl_lookup

提示: 我們也可以在 Table Name 欄位中輸入星號字元 *。這將一次性為每個資料庫表格產生一個模型類別。

在此階段,我們將擁有以下新建立的檔案

  • models/User.php 包含從 CActiveRecord 擴展而來的 User 類別,可用於存取 tbl_user 資料庫表格;
  • models/Post.php 包含從 CActiveRecord 擴展而來的 Post 類別,可用於存取 tbl_post 資料庫表格;
  • models/Tag.php 包含從 CActiveRecord 擴展而來的 Tag 類別,可用於存取 tbl_tag 資料庫表格;
  • models/Comment.php 包含從 CActiveRecord 擴展而來的 Comment 類別,可用於存取 tbl_comment 資料庫表格;
  • models/Lookup.php 包含從 CActiveRecord 擴展而來的 Lookup 類別,可用於存取 tbl_lookup 資料庫表格。

3. 實作 CRUD 操作

建立模型類別後,我們可以使用 Crud Generator 來產生程式碼,以實作這些模型的 CRUD 操作。我們將對 PostComment 模型執行此操作。

Crud Generator 頁面上,在 Model Class 欄位中輸入 Post(我們剛才建立的文章模型類別的名稱),然後按下 Preview 按鈕。我們將看到將產生更多檔案。按下 Generate 按鈕來產生它們。

針對 Comment 模型重複相同的步驟。

讓我們看一下 CRUD 產生器產生的檔案。所有檔案都產生在 /wwwroot/blog/protected 下。為了方便起見,我們將它們分組為 控制器 檔案和 視圖 檔案

  • 控制器檔案

    • controllers/PostController.php 包含 PostController 類別,它是負責所有關於文章的 CRUD 操作的控制器;
    • controllers/CommentController.php 包含 CommentController 類別,它是負責所有關於留言的 CRUD 操作的控制器;
  • 視圖檔案

    • views/post/create.php 是顯示 HTML 表單以建立新文章的視圖檔案;
    • views/post/update.php 是顯示 HTML 表單以更新現有文章的視圖檔案;
    • views/post/view.php 是顯示文章詳細資訊的視圖檔案;
    • views/post/index.php 是顯示文章列表的視圖檔案;
    • views/post/admin.php 是在表格中顯示帶有管理命令的文章的視圖檔案。
    • views/post/_form.php 是嵌入在 views/post/create.phpviews/post/update.php 中的部分視圖檔案。它顯示用於收集文章資訊的 HTML 表單。
    • views/post/_view.phpviews/post/index.php 使用的部分視圖檔案。它顯示單篇文章的簡要視圖。
    • views/post/_search.phpviews/post/admin.php 使用的部分視圖檔案。它顯示一個搜尋表單。
    • 也為留言產生了類似的一組視圖檔案。

4. 測試

我們可以透過訪問以下 URL 來測試我們剛剛產生的程式碼所實作的功能

http://www.example.com/blog/index.php?r=post
http://www.example.com/blog/index.php?r=comment

請注意,產生的程式碼所實作的文章和留言功能是完全獨立的。此外,在建立新文章或留言時,我們需要輸入資訊,例如 author_idcreate_time,這些資訊在實際應用程式中應該由程式設定。別擔心。我們將在下一個里程碑中修正這些問題。目前,我們應該相當滿意,因為這個原型已經包含了我們需要為部落格應用程式實作的大部分功能。

為了更好地理解上述檔案是如何使用的,我們在下面展示了在部落格應用程式中顯示文章列表時發生的工作流程

  1. 使用者請求 URL http://www.example.com/blog/index.php?r=post
  2. Web 伺服器執行 進入點腳本,它建立並初始化一個 應用程式 實例來處理請求;
  3. 應用程式建立一個 PostController 的實例並執行它;
  4. PostController 實例透過呼叫其 actionIndex() 方法來執行 index 動作。請注意,如果使用者未在 URL 中指定要執行的動作,則 index 是預設動作;
  5. actionIndex() 方法查詢資料庫以取回近期文章列表;
  6. actionIndex() 方法使用文章資料呈現 index 視圖。

發現錯字或您認為此頁面需要改進?
在 github 上編輯 !