ZF in ∞ days –> day 3 –> Create a Model
如果你以為這篇是在說如何將自己創造成為一個模特兒,那你就大錯特錯嚕,從 ZF 的角度看,Model 是資料的集合,他可以是文件紀錄檔,或是 DB 資料,也可以是外站取得的資料,換句話說只要是屬於資料類的都可以把他歸納為 Model 。
當 USER 發出請求後 MVC 運作的流程 ( 此流程僅為說明用,與程式執行流程不同 )
這次的 Model 我們就使用 MySQL 取得資料並且列印在頁面上。
STEP 1 :
安裝 MySQL ,並且有 phpmyadmin 或是其他管理系統
並且建立 day3 資料庫 ,建立 albums 資料表,並且插入五筆測試資料
SQL 內容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE DATABASE 'day3'; USE 'day3'; CREATE TABLE IF NOT EXISTS 'albums' ( 'id' int(11) NOT NULL AUTO_INCREMENT, 'artist' varchar(100) NOT NULL, 'title' varchar(100) NOT NULL, PRIMARY KEY ('id') ) AUTO_INCREMENT=6 ; INSERT INTO 'albums' ('id', 'artist', 'title') VALUES (1, 'Bob Dylan', 'Together Through Life'), (2, 'Various Artists', 'Now That''s what I Call Music! 72'), (3, 'Lady Gaga', 'The Fame'), (4, 'Lily Allen', 'It''s Not Me, It''s You'), (5, 'Kings of Leon', 'Only By The Night');
STEP 2 :
打開 application/config/application.ini 檔案,並且加入 DB 連線的預設資料
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhostresources.db.params.username = root
resources.db.params.password = 1234
resources.db.params.dbname = day3
STEP 3 :
如 day1 在 Zend Studio 建立一個 day3 的專案
在專案上增加一個 Zend Framework Item ,並且選擇 Zend Table
接下來我們在 file name 輸入 Albums ( 與資料表相同名稱 )
完成後會得到一個實做 Zend_Db_Table_Abstract 的類別,Zend_Db_Table_Abstract 是一個抽象類別,必須要透過繼承實作才可以使用,他預設了包含一些取回資料的 FUNCTION。
另外 : 決定這隻 CLASS 取得哪張資料表的真正變數是這個 $_name 。
STEP 4 :
打開 IndexController.php 檔案,並且輸入
// action body
//將 models 內的 Albums 掛載,注意路徑為 public 起算//未來也可以載入 autoload 方式自動掛載
Zend_Loader::loadClass("Albums","../application/models/");
$albums = new Albums();
$this->view->albums = $albums->fetchAll();
STEP 5 :
打開 views/scripts/index/index.phtml
刪除原本的內容,並且修改為其內容為
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>取得唱片列表</title> </head> <body> <h1>唱片列表</h1> <table> <tr> <th>Title</th> <th>Artist</th> </tr> <?php foreach ( $this->albums as $album ) : ?> <tr> <td><?php echo $this->escape ( $album->title ); ?></td> <td><?php echo $this->escape ( $album->artist ); ?></td> </tr> <?php endforeach; ?> </table> </body> </html>
STEP 6 :
開啟瀏覽器執行 http://localhost/day3/public/index.php
便可正確取得資料庫內的資料
一個簡單的 MODEL 實作,這樣你有了解了嗎~
簡易的說,我們在 Model 建立資料,再將資料一一填入 View 中。
如此切割後,我們已經可以把一些資料重複使用,當未來其他頁面需要取得唱片列表,我們不需要像以前一樣先 NEW一個 MYSQL 連線,之後呢在下 select * from albums ,當然如果只是取得全部資料可能還不是很清楚,當未來資料表以及取用變多之後,就會覺得比較方便了。
Random Posts
Loading…
相關文章 :









請問資料表的名稱是不是不能有底線「_」?
我用「AA_BB」一直都不行,後來將資料表名稱改為「AABB」再重構之後就行了。
@Govia
ZEND 在對一些 MODEL 的命名有特殊規則
例如你可命名 MODEL 為 Default_Model_AABB 這種寫法
並且在 autoload 加上前綴字元
就可以自動引用喔~~
不知道該說方便還是難學習 呵呵~~
請問我照著您的步驟作會出現An error occurred的頁面,
如果把$this->view->albums = $albums->fetchAll();這行註解掉就可正常顯示index.phtml,原因是什麼呢?
@Coil
問題解決了@@” 原來是我的extension=php_pdo_mysql.dll沒有打開
@Coil
對喔
這篇是使用 PDO_MYSQL 做連線喔
所以要記得打開 pdo_mysql