首頁 > ZEND framework, 網頁設計 > ZF in ∞ days –> day 3 –> Create a Model

ZF in ∞ days –> day 3 –> Create a Model

2010年5月29日  瀏覽次數 : 3,204

如果你以為這篇是在說如何將自己創造成為一個模特兒,那你就大錯特錯嚕,從 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 = localhost

resources.db.params.username = root

resources.db.params.password = 1234

resources.db.params.dbname = day3

image

STEP 3 :

如 day1 在 Zend Studio 建立一個 day3 的專案

在專案上增加一個 Zend Framework Item ,並且選擇 Zend Table

image

接下來我們在 file name 輸入 Albums ( 與資料表相同名稱 )

image

完成後會得到一個實做 Zend_Db_Table_Abstract 的類別,Zend_Db_Table_Abstract 是一個抽象類別,必須要透過繼承實作才可以使用,他預設了包含一些取回資料的 FUNCTION。

另外 : 決定這隻 CLASS 取得哪張資料表的真正變數是這個 $_name 。

image

STEP 4 :

打開 IndexController.php 檔案,並且輸入

  // action body

  //將 models 內的 Albums 掛載,注意路徑為 public 起算

  //未來也可以載入 autoload 方式自動掛載

    Zend_Loader::loadClass("Albums","../application/models/");

    $albums = new Albums();

    $this->view->albums = $albums->fetchAll();

image

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>

image

STEP 6 :

開啟瀏覽器執行 http://localhost/day3/public/index.php

便可正確取得資料庫內的資料

image

 

一個簡單的 MODEL 實作,這樣你有了解了嗎~

簡易的說,我們在 Model 建立資料,再將資料一一填入 View 中。

如此切割後,我們已經可以把一些資料重複使用,當未來其他頁面需要取得唱片列表,我們不需要像以前一樣先 NEW一個 MYSQL 連線,之後呢在下 select * from albums ,當然如果只是取得全部資料可能還不是很清楚,當未來資料表以及取用變多之後,就會覺得比較方便了。

Random Posts

Loading…

:: 把這篇好文推到書籤網站與更多人分享吧 ::
  • funp
  • Hemidemi
  • YahooKimo
  • Google
  • udn
  • Haohao
  • Live

相關文章 :

Ausir ZEND framework, 網頁設計 , , , , , ,

  1. Govia
    2010年6月5日18:36 | #1

    請問資料表的名稱是不是不能有底線「_」?
    我用「AA_BB」一直都不行,後來將資料表名稱改為「AABB」再重構之後就行了。

  2. 2010年6月5日20:30 | #2

    @Govia

    ZEND 在對一些 MODEL 的命名有特殊規則
    例如你可命名 MODEL 為 Default_Model_AABB 這種寫法
    並且在 autoload 加上前綴字元
    就可以自動引用喔~~

    不知道該說方便還是難學習 呵呵~~

  3. Coil
    2010年8月8日23:37 | #3

    請問我照著您的步驟作會出現An error occurred的頁面,
    如果把$this->view->albums = $albums->fetchAll();這行註解掉就可正常顯示index.phtml,原因是什麼呢?

  4. Coil
    2010年8月9日00:01 | #4

    @Coil
    問題解決了@@” 原來是我的extension=php_pdo_mysql.dll沒有打開

  5. 2010年8月15日21:00 | #5

    @Coil

    對喔
    這篇是使用 PDO_MYSQL 做連線喔
    所以要記得打開 pdo_mysql

  1. 本篇文章目前尚無任何 trackbacks 和 pingbacks。