酷!學園
2010-09-03 13:16 *
歡迎光臨, 訪客. 請先 登入註冊一個帳號.
您忘了 啟用您的帳號嗎?

請輸入帳號, 密碼以及預計登入時間
新聞:
 
   首頁 | Study-Area | 鳥園 | 鳥哥的Linux私房菜   說明 搜尋 日曆 登入 註冊  
頁: [1]
  列印  
作者 主題: php下的MVC [Zend Framework] 教學  (閱讀 20948 次)
0 會員 以及 1 訪客 正在閱讀本篇主題.
uberr
懷疑的國中生
**
文章: 62



檢視個人資料
« 於: 2008-02-15 12:32 »

Zend Framework是php裡頭其中一種Framework.在台灣跟香港都比較難找到關於Zend Framework的文章.反而CakePHP的文章就很多.所以今天我想分享一下我的心得.我現在的Project都是用Zend Framework來完成.Zend Framework提供大量的module給你使用.它還提供連接Google,Yahoo,Flickr,Amazon..etc Web Services的module.

Zend_Auth // login module
Zend_Db // database module
Zend_Gdata // Google Application module

如果想要了解多些關於MVC,自己到google找吧.

M = Model // 設定連接資料庫的資料[當使用Zend_Db_Table才會用上]
V = View // 顯示的頁面
C = Controller // 控制器,就是你的php程式碼

運作過程:
鍵入網址->Controller->執行Action->回傳給View(顯示頁面)

運作原理:

example: http://www.example.com/auth/login
http://www.example.com // 網址
auth // Controller [控制器]
login // Controller裡面的Action [動作]

程式碼:
class AuthController extends Zend_Controller_Action
{
    public function loginAction()
    {
       // check username and password
    }
}

如果你沒有加入任何param係網址裡頭,預設是使用IndexController和Index Action

Zend Framework架構:
application/
    controllers/
        IndexController.php  // 所有Controller一定要大寫開頭
    models/
    views/
        scripts/
            index/
                index.phtml // 記得是phtml,不是html
htdocs/
    scripts/
    images/
    styles/
library/
.htaccess
index.php

安裝Zend Framework:
1.下載 Zend Framework,PHP5,MYSQL
http://framework.zend.com/releases/ZendFramework-1.0.3/ZendFramework-1.0.3.tar.gz
2.建立Zend Framework架構
3.解壓到Zend架構下的library目錄下,tar -zxf ZendFramework-1.0.3.tar.gz -C /var/www/html/[Zend 目錄]/library/
4.create .htaccess,寫入到 .htaccess
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
5.修改httpd.conf,把AllowOverride改成All

現在我們要建立index.php,IndexController.php,index.phtml.index.php 它是用來設定要重導(Route)去邊一個Controller,include module.是一個很重要的file.

廢話少說,來點實作吧~!

index.php

程式碼:
<?php

set_include_path('.'.PATH_SEPARATOR.'./library/'.PATH_SEPARATOR.'./application/m                                              odels/'); // 設定module的位置
include "Zend/Loader.php"; // 必需要include的module,它是把需要的module導入

Zend_Loader::loadClass('Zend_Controller_Front'); // Zend_Controller_Front是必需的module,它是用來控制route

$frontController = Zend_Controller_front::getInstance(); // create一個Front Object
$frontController->setControllerDirectory('./application/controllers'); // 設定Controller目錄的路徑
$frontController->dispatch();

IndexController.php
程式碼:
<?php

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
      $this->view->message = "Zend Framework tutorial"; // 回傳 message
    }

    public function helloAction()
    {
      $this->view->message = "Hello World"; // 回傳 message
    }
}

index.phtml
程式碼:
<?php
 echo $this->message;
?>

http://localhost/index/index
Display Result="Zend Framework tutorial"

hello.phtml
程式碼:
<?php
 echo $this->message;
?>

http://localhost/index/hello
Display Result="Hello World"

Demo:
http://wingning.no-ip.org/studyarea/helloworld/
http://wingning.no-ip.org/studyarea/helloworld/index/hello


下載:http://wingning.no-ip.org/studyarea/download/helloworld.tar.gz

這個二個Application是我使用Zend Framework+Dojo開發的.如果大家對Zend Framework和Dojo有興趣,我可以把我其它的心得分享出來.

http://wingning.no-ip.org/lab/invoice
username: admin
password: 123456

http://wingning.no-ip.org/lab/competition
« 最後編輯時間: 2008-02-19 18:58 由 uberr » 已記錄
kiang
活潑的大學生
***
文章: 299


檢視個人資料 個人網站
« 回覆文章 #1 於: 2008-02-15 20:21 »

引用
這個二個Application是我使用Zend Framework+Dojo開發的.如果大家對Zend Framework和Dojo有興趣,我可以把我其它的心得分享出來.

有興趣、有興趣,當然有興趣 微笑
已記錄

****************************************************
Finjon Kiang / 江明宗
Just This Computer Studio / 就這間電腦工作室
Website: http://olc.tw
****************************************************
Darkhero
酷!學園 學長們
俺是博士!
*****
會員性別: 男
文章: 3582


我家小貓~


檢視個人資料 個人網站
« 回覆文章 #2 於: 2008-02-16 01:12 »

好文章好文章..

終於,我們這裡三種可以堪稱是 php 比較多人用的 framework 的文章都有了勒..^_^...
已記錄

希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
梁楓
俺是博士!
*****
文章: 6217



檢視個人資料
« 回覆文章 #3 於: 2008-02-16 02:22 »

哇,驚為天人啊!
加油加油!
已記錄
johnlp
懷疑的國中生
**
文章: 85


檢視個人資料
« 回覆文章 #4 於: 2008-02-16 21:33 »

對話框淡出淡入的效果是 Dojo 做出來的嗎?
很酷耶

用起來很桌面的感覺
已記錄

我最愛的楓之谷小遊戲網-有很多海綿寶寶遊戲
uberr
懷疑的國中生
**
文章: 62



檢視個人資料
« 回覆文章 #5 於: 2008-02-16 23:03 »

對話框淡出淡入的效果是 Dojo 做出來的嗎?
很酷耶

用起來很桌面的感覺

對是用Dojo Dialog做出來的.
已記錄
有Linux真好
活潑的大學生
***
文章: 271


檢視個人資料
« 回覆文章 #6 於: 2008-03-15 22:59 »

請問一下:Zend Framework 的優點跟特色是什麼?
已記錄

希望 Linux 在台灣家庭的普及率可以快速提升。
困難點1: 線上遊戲大都不支援。
困難點2: 大家都用XP習慣了。不過現在換VISTA了,操作位置好像又大挪移了,那換Linux也不是一樣了嗎? 反正都要重新適應。
uberr
懷疑的國中生
**
文章: 62



檢視個人資料
« 回覆文章 #7 於: 2008-03-16 02:38 »

請問一下:Zend Framework 的優點跟特色是什麼?

1.因為Zend Framework用MVC架構來運作,它把顯示(view)和動作(controller)分離,增加程式碼的重用性.更把數據和動作(controller)分離,這使得你無需理會controller如何從後台存取數據.這使得在維護方面,更為容易.
2.有助團隊開發,這使得分工明確.
3.它使用了OOP(物件導向實作),提供空間給你擴充(extends).還有Design Pattern.
4.因為Zend Framework是由Zend團隊開發出來的,經過完整的測試.由一班有經驗的PHP Programmer維護和更新.你完全可以放心使用它.
5.它提供了大量的 High-quality, object-oriented PHP 5 class library,例如:Zend_Log,Zend_Db,Zend_Auth,Zend_Acl..etc.你無需自行擇寫.
還有更多的好處請自行發掘.嘿嘿.

可能你要用一二個月時間去學習它,但他對你將來修改或重寫程式碼所花的時間.是值得的.

舉一個例子好了.例如CMS的ACL好了.
當一個member登入後,你要為每一頁去驗證它是否登入,是否有權限作出add,edit,update,publish...etc.
為每一頁寫入或導入header和footer.是不是覺得很煩惱.可能大家巳經習慣.=)

如果用Zend_Controller就可以解決以上的問題.

本來Zend_Controller這個topic會在下一章介紹.不過現在會說一點點.
Zend_Controller係全個架構的核心(kernel),
由frontController->route->predispatch->postdispatch->action [這個過程將會在下一章詳細說明]

現在會簡略說明一下如困解決每頁加入header and footer的方法.

首先建立一個MyPlugin Class,extends Zend_Controller_Plugin_Abstract,然後用上predispatch method,
在prdeispatch method裡頭.call response object [response object自動由frontController建立],
然後把你的header寫入response最頭,再把footer寫入response最尾.

最後在index.php frontController裡頭加入這個plugin.

當你call index controller 的bar action的時候,它會自動在response裡加入header和footer.每一頁如同.

當然可能你會覺得為什麼一個這麼簡單的東西都要弄到這麼複雜.只是寫入或導入header和footer而以.
可是如果是加入agreement,認證等等.這好好的讓你思考思考.是不是時候把自己的模式改變,Zend Framework只是把你的工作推快和更完美. ^_______________^
« 最後編輯時間: 2008-03-16 02:41 由 uberr » 已記錄
阿旭
可愛的小學生
*
會員性別: 男
文章: 10



檢視個人資料 個人網站
« 回覆文章 #8 於: 2009-02-11 16:20 »

http://framework.zend.com/download/amf


看到這個很振奮人心呢!
哈哈,雖說現在RIA還在大戰
Adobe AIR
Microsoft Sliverlight
Sun JavaFX

哈,真的要選邊站了嗎?
我說不定會因為php這個framework就投靠了Adobe! 微笑
已記錄
ricky
區域板主
鑽研的研究生
*****
文章: 619



檢視個人資料 個人網站
« 回覆文章 #9 於: 2009-02-11 16:35 »

RIA一直是"理想化"的東西
除非搜尋引擎能全面支援RIA內容索引
或是你的網站根本不想被列入搜尋引擎的索引裡面
不然RIA要全面取代現在的HTML
還是有好長一段路吧
已記錄

我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://pets.yomopets.com/ricky
阿旭
可愛的小學生
*
會員性別: 男
文章: 10



檢視個人資料 個人網站
« 回覆文章 #10 於: 2009-02-15 01:12 »

哈,我到沒有想那麼長遠啦。

其實有時候我蠻好奇:

現在在我們眼前跑的許多技術規格和規範(許許多多的標準等等),都是老早前好多好多人想出來的。
然後到了這些規範或技術真的在我們眼前run了,又是好一段時間以後了。

規範這些東西的人們非常厲害(例如IEEE的院士們)是毋庸置疑的。
類如:RIA、IPv6、等等許多東西,很多都是先在實驗室裡面才慢慢出來的。

我好奇的是現在實驗室裡面流行什麼啦?單就網路這個領域的話。
例如網格啊、光柵啊、電線網路啊、等等,得到這類訊息的最佳管道是從哪邊?

例如 Zend 有什麼新花樣的時候,除了官網(新的技術或作法出來之前,一定都會在某個地方先研究過一番吧?)
開發論壇、開源社群就是獲得這方面訊息的管道嗎?


我只是想說,IT這塊,技術真的好快好快好快 @..@
就算學習的速度跟不上,可是還是想知道現在實驗室裡的天才怪傑們之間,正在流行些什麼,或他們未來幾年會推出什麼
我不大知道管道去learn得這些資訊 @..@

就像我還搞不清楚 RIA 和 Html 間是怎麼樣的關係一樣
已記錄
阿旭
可愛的小學生
*
會員性別: 男
文章: 10



檢視個人資料 個人網站
« 回覆文章 #11 於: 2009-02-16 00:29 »

像這些都算是幾個會讓人們覺得新奇、好玩的技術吧,
說不定沒過幾年真的就要跟滑鼠鍵盤kiss goodbye囉 :)
這幾個都很好玩,如果你有玩過 Wii remote,這些會更簡單得多。
而且只需要一台非常一般的 webcam!

touchless (Microsoft in)
http://www.officelabs.com/projects/touchless/Pages/default.aspx
http://www.codeplex.com/touchless

touchlib
http://nuigroup.com/touchlib/

CamSpace <----------------強烈推薦安裝來玩看看!
http://www.camspace.com/
CamSpace 再簡單不過了,下載、安裝、Play!有很多現成的小遊戲可以玩唷!

reactable
http://mtg.upf.edu/reactable/
這是個跟樂器有關的計畫,以後的DJ台說不定就是這樣子啦!哈哈!



呃喔,我好像越講越偏了。
離題太遠了,就此打住吧~
只是這些東西忍不住想跟大家分享一下
哈,就像突然發現 php 竟然有 RIA 的 framework 一樣興奮!
已記錄
westlifehk
可愛的小學生
*
文章: 5


檢視個人資料
« 回覆文章 #12 於: 2009-03-12 17:48 »

大大你寫的Zend framework教學文章很讚, 我這個菜鳥新手也完全明白.
現在出了1.7.x的version. 大大可以教一下怎樣使用Zend_DB_Table來insert, update, create嗎?
感激不盡 微笑
已記錄
jaceju
憂鬱的高中生
***
文章: 94


檢視個人資料
« 回覆文章 #13 於: 2009-03-13 10:33 »

http://www.jaceju.net/blog/?cat=16 我的一些心得,請參考看看 微笑
已記錄
cokacora
可愛的小學生
*
文章: 4


檢視個人資料
« 回覆文章 #14 於: 2010-04-18 01:23 »

写的好,其实很多Framework在学习时,就是因为不知道为什么要绕那么多圈子,在介绍时如果把那样作的理由加上的话,会使学习非常透彻。感觉作者在介绍Zend framework时根据自身的经验之谈所作的说明。
已記錄
頁: [1]
  列印  
 
前往:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Valid XHTML 1.0! Valid CSS!
本頁花了 0.081 秒,以及 17 次的資料庫查詢。