Zend Framework 2 搶先體驗

新一代的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;
    }   
}

與1.x的類似點

一些慣例和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

相關文章
相關標籤/搜索