新一代的PHP框架Zend Framework 2 誕生了,它基於Zend Framework 1,僅支持PHP 5.3,它將在將來一年裏取代其舊版本。php
由於熟悉Zend Framework 1,我決定進入2.x beta版本,看看有什麼變化,並測試對已有的程序是否有影響。css
Rob Allen寫過一個教程很適合那些從沒用過Zend Framework框架的人。你能夠經過git克隆(或下一個zip包)來安裝框架,並增長一些應用模塊。html
若是你想玩一個已經寫好的框架程序,那麼一個包含了實現數據庫表的CRUD模塊的程序,比起僅僅是「HelloWorld」的程序要好不少。git
框架之因此好,是由於它已經包含一些功能模塊及.htaccess。因此你只須要在Apache上配置,就能夠運行起來。之前,一個新手在建立程序以前都要先配置好Zend Framework 1,我不敢說第一次使用Zend_Tool和ZF都是那麼簡單。數據庫
如今讓咱們來看看新框架的變化 - 目錄結構:框架
Application/ config/ src/ views/
每一個模塊代碼(類)都是從配置和視圖模板中分離的,而不是強迫分開於控制器、模型、服務和其餘對象。佈局
這也意味着,理論上你想去掉在一個應用模塊,只須要去掉一個單獨的文件夾。但這並不意味着模塊之間沒有關聯,例如:兩個步驟的視圖佈局,就能夠指定使用其餘的模塊。這隻須要將兩個模塊的配置合併成一個。學習
做爲一個新的主要版本,該框架也採用新標準,並中斷對以前版本的兼容性,就像Symfony 2。測試
1.僅支持PHP 5.3,使用類的命名空間,再也不使用下劃線來分隔虛擬包。fetch
2.採用PSR-0 autoloading,全部模塊都在src/文件夾下,因此再也不匹配類名和文件名。
3.再也不有接口後綴的命名。
4.異常採用接口,因此PHP 5.3的異常是由一個模塊繼承和實現的(例如:Zend\Json\Interface)。
5.再也不有下劃線前綴來強調私有(private)和保護(protected)的屬性和方法。
從上述可見,新標準並無帶來什麼革命性的標誌,而是它讓Coder在寫新代碼的時候減小了一些負擔的。
配置有點長,但控制得當:例如,鍵名'di',在一個模塊的配置文件中包含全部的類及參數。可能有人以爲整個框架變得意外的複雜了,但咱們不得不接受,爲了使用其所有的特性。
另外一個點,我以爲有必要提的是Module.php的配置。它被定義成自動加載的模式,這是很標準的作法。這樣咱們就不會苦惱於如何加載它們。
控制器相對於Zend Framework 1變得輕量了:它們在注入對象的時候能夠指定setter,而不是去搜索周圍的對象。這並非一個什麼神奇的功能:由於你能夠在配置中指定setter的列表,並將引導你去思考它們的關聯性及數量。總的來講控制器減輕了,甚至(理論上)可實例化。
Action返回一個視圖模型,因此使他們不須要知道視圖對象:
class AlbumController extends ActionController { /** * @var \Album\Model\AlbumTable */ protected $albumTable; public function indexAction() { return array( 'albums' => $this->albumTable->fetchAll(), ); } public function setAlbumTable(AlbumTable $albumTable) { $this->albumTable = $albumTable; return $this; } }
一些慣例和API與Zend Framework 1一致,這意味着你不須要再次學習它們:
1.控制器的API及其助手:在控制器裏你能夠得到請求,及其餘混合特徵,如重定向。
2.表單容許定義元素(標籤、驗證和過濾器),並在子類中提供的初始化方法init()。
3.視圖一般遵循文件夾結構<controller>/<action>.phtml;一樣$this可調用escape()和url()等視圖變量。
基本數據庫的支持也是基於Table Data Gateway 類及其擴展。固然你能夠選擇整合Doctrine2或其餘ORMs。
請注意下面的問題:爲何我要使用Zend Framework 2來替代Symfony 2?
提供一個觀點:ZF2相對於使用Zend Framework 1的程序來講,有更簡單容易的代碼升級方式,而且你已經有了ZF的使用經驗。此外,它的設計並不落後於Symfony,並且不用所有重寫。
本文爲原創翻譯
英文鏈接:http://css.dzone.com/articles/zend-framework-2-tryout