作者 主題: php下的MVC [Zend Framework] 教學  (閱讀 83094 次)

0 會員 與 1 訪客 正在閱讀本文。

uberr

  • 懷疑的國中生
  • **
  • 文章數: 62
    • 檢視個人資料
    • 天創科技網頁設計公司
php下的MVC [Zend Framework] 教學
« 於: 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
(&#39;.&#39;.PATH_SEPARATOR.&#39;./library/&#39;.PATH_SEPARATOR.&#39;./application/m                                              odels/&#39;); // 設定module的位置
include "Zend/Loader.php"// 必需要include的module,它是把需要的module導入

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

$frontController Zend_Controller_front::getInstance(); // create一個Front Object
$frontController->setControllerDirectory(&#39;./application/controllers&#39;); // 設定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

天創科技網頁設計公司
« 上次編輯: 2011-10-03 15:03 由 uberr »

kiang

  • 活潑的大學生
  • ***
  • 文章數: 310
    • 檢視個人資料
    • 就這間電腦工作室
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #1 於: 2008-02-15 20:21 »
引用
這個二個Application是我使用Zend Framework+Dojo開發的.如果大家對Zend Framework和Dojo有興趣,我可以把我其它的心得分享出來.

有興趣、有興趣,當然有興趣 :)
****************************************************
Finjon Kiang / 江明宗
Just This Computer Studio / 就這間電腦工作室
Website: http://olc.tw
****************************************************

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #2 於: 2008-02-16 01:12 »
好文章好文章..

終於,我們這裡三種可以堪稱是 php 比較多人用的 framework 的文章都有了勒..^_^...
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #3 於: 2008-02-16 02:22 »
哇,驚為天人啊!
加油加油!

johnlp

  • 懷疑的國中生
  • **
  • 文章數: 86
    • 檢視個人資料
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #4 於: 2008-02-16 21:33 »
對話框淡出淡入的效果是 Dojo 做出來的嗎?
很酷耶

用起來很桌面的感覺
我最愛的楓之谷小遊戲網-有很多海綿寶寶遊戲

uberr

  • 懷疑的國中生
  • **
  • 文章數: 62
    • 檢視個人資料
    • 天創科技網頁設計公司
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #5 於: 2008-02-16 23:03 »
對話框淡出淡入的效果是 Dojo 做出來的嗎?
很酷耶

用起來很桌面的感覺

對是用Dojo Dialog做出來的.

有Linux真好

  • 活潑的大學生
  • ***
  • 文章數: 271
    • 檢視個人資料
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #6 於: 2008-03-15 22:59 »
請問一下:Zend Framework 的優點跟特色是什麼?
希望 Linux 在台灣家庭的普及率可以快速提升。
困難點1: 線上遊戲大都不支援。
困難點2: 大家都用XP習慣了。不過現在換VISTA了,操作位置好像又大挪移了,那換Linux也不是一樣了嗎? 反正都要重新適應。

uberr

  • 懷疑的國中生
  • **
  • 文章數: 62
    • 檢視個人資料
    • 天創科技網頁設計公司
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #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
  • 性別: 男
    • 檢視個人資料
    • zx1986
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #8 於: 2009-02-11 16:20 »
http://framework.zend.com/download/amf


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

哈,真的要選邊站了嗎?
我說不定會因為php這個framework就投靠了Adobe! :)

ricky

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #9 於: 2009-02-11 16:35 »
RIA一直是"理想化"的東西
除非搜尋引擎能全面支援RIA內容索引
或是你的網站根本不想被列入搜尋引擎的索引裡面
不然RIA要全面取代現在的HTML
還是有好長一段路吧
我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/

阿旭

  • 可愛的小學生
  • *
  • 文章數: 10
  • 性別: 男
    • 檢視個人資料
    • zx1986
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #10 於: 2009-02-15 01:12 »
哈,我到沒有想那麼長遠啦。

其實有時候我蠻好奇:

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

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

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

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


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

就像我還搞不清楚 RIA 和 Html 間是怎麼樣的關係一樣

阿旭

  • 可愛的小學生
  • *
  • 文章數: 10
  • 性別: 男
    • 檢視個人資料
    • zx1986
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #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
    • 檢視個人資料
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #12 於: 2009-03-12 17:48 »
大大你寫的Zend framework教學文章很讚, 我這個菜鳥新手也完全明白.
現在出了1.7.x的version. 大大可以教一下怎樣使用Zend_DB_Table來insert, update, create嗎?
感激不盡 :)

jaceju

  • 憂鬱的高中生
  • ***
  • 文章數: 106
    • 檢視個人資料
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #13 於: 2009-03-13 10:33 »
http://www.jaceju.net/blog/?cat=16 我的一些心得,請參考看看 :)

cokacora

  • 可愛的小學生
  • *
  • 文章數: 5
    • 檢視個人資料
回覆: php下的MVC [Zend Framework] 教學
« 回覆 #14 於: 2010-04-18 01:23 »
写的好,其实很多Framework在学习时,就是因为不知道为什么要绕那么多圈子,在介绍时如果把那样作的理由加上的话,会使学习非常透彻。感觉作者在介绍Zend framework时根据自身的经验之谈所作的说明。