2013年8月17日 星期六

用 Eclipse 開發 Yii Web Application (三)

由於我們已經將 Gii 設定好了, 我們就直接用 Gii 來幫我們建立 model/controller/view
首先建立 model, 以瀏覽器開啓 http://localhost/MyWebSite/index.php?r=gii
登入後, 點選左邊的 Model Generator, 並在 Table Name 的欄位選我們之前建立的 Table,
例如我們輸入 courses, 這時下面的 Model Class 就會自動幫我們填入 Courses, 如果你想用其他名字也可以自行更改。


點選下面的 Preview, 可以看見預計幫我們建在 models 目錄下的 Courses.php 的程式碼

點選Generate 的按鈕就會幫我們產生 table courses 對應的 Model Courses.php。
Oops! 出現上圖的錯誤了。
會有這樣的錯誤發生, 原因是我們用瀏覽器執行Gii, 對系統而言是Web Server 透過 CGI 去執行系統上的指令(此處為要以Web Server 的身份寫入檔案至我們的目錄中), 由於大部份的Web Server 由於安全因素, 都不會以 root 身份來啓動 Web Server, 所以會產生寫入檔案權限不足的問題。
解決的方法是直接在我們專案目錄中下 sudo chmod -R o+w protected, 把 protected 以下的所有目錄都開啓所有人都可以寫入的權限。
再執行一次, 成功了如下圖
我們將其他三個 table 的 model 也建立起來。

建立了 model 後, 我們就可以開始建立 Controller 及 view 即可以根據我們的需要來處理網站的流程了。
但 Yii 還有更快的方式來幫我們根據之前建立好的 table 直接產生 C (Create 建立/新增資料) R (Read/Retrieve 瀏覽資料) U (Update 更新資料) D (Delete 刪除資料) 相關的 Controllers 與 Views。

一樣在 Gii 網頁點選左上角 Crud generator, 在 Model Class 欄位中填入我們剛建立的 Courses, 系統也自動幫我們填入 Controller ID courses。按一下 Preview 可以看到 Gii 預計幫我們自動建立的相關程式。
我們可以看到除了自動建立了一個名為 CoursesController.php 的 Controller 並同時建立了好幾個在 views/courses 下的 php 程式。如果有興趣看看Gii建立的 Controller 與 Views 可以點連結先看看內容, 然後按 Generate 鈕幫我們產生這些檔案。

接著我們看看 Gii 的 Crud generatro 幫我們產生的網頁長得什麼樣子。
在瀏覽器中輸入 http://localhost/MyWebSite/index.php?r=courses

可以看到 table courses 裡面有兩筆資料 (我之前輸入的資料), 這就是 R (Read/Retrieve), 注意右邊有一個連結 Create Courses 這是 C (Create), 那麼 U (Update) 與  D (Delete) 在哪裡呢? 因為 Update 與 Delete 是針對一筆或多筆資料的, 所以要點資料上的連結 (也就是 Courses 的主鍵 course_no) 就可以看見了。
接著可以依前述步驟將 students 與 teachers 的 CRUD 建立起來。
等等那還有一個 table classes 呢?
我們可以再試試看用 Gii 幫我們建立 classes 的 CRUD
出現了錯誤訊息: Table 'classes' has a composite primary key which is not supported by crud generator.
這是因為其他三個都是比較單純的 Table, 都是僅有一個主鍵 (Primary Key),  但 Classes 有三個主鍵, 來自 table courses 的 course_no, 來自 table students 的 student_no 與自己 table 所需的 semester
所以 Gii 沒那麼聰明能幫我們建立 CRUD。

沒有留言:

張貼留言