注册
登录

您现在的位置是:首页 > 学无止境

Zend Framework 2 抢先体验

木木彡82 2012-03-15 21:08:38 539人围观
新一代的PHP框架Zend Framework 2 诞生了,它基于Zend Framework 1,仅支持PHP 5.3,它将在未来一年里取代其旧版本。
初探
因为熟悉Zend Framework 1,我决定进入2.x beta版本,看看有什么变化,并测试对已有的程序是否有影响。
Rob A...

新一代的PHP框架Zend Framework 2 诞生了,它基于Zend Framework 1,仅支持PHP 5.3,它将在未来一年里取代其旧版本。

初探

因为熟悉Zend Framework 1,我决定进入2.x beta版本,看看有什么变化,并测试对已有的程序是否有影响。

Rob Allen写过一个教程很适合那些从没用过Zend Framework框架的人。你可以通过git克隆(或下一个zip包)来安装框架,并增加一些应用模块。

如果你想玩一个已经写好的框架程序,那么一个包含了实现数据库表的CRUD模块的程序,比起仅仅是“HelloWorld”的程序要好很多。

框架之所以好,是因为它已经包含一些功能模块及.htaccess。所以你只需要在Apache上配置,就可以运行起来。以前,一个新手在创建程序之前都要先配置好Zend Framework 1,我不敢说第一次使用Zend_Tool和ZF都是那么简单。

现在让我们来看看新框架的变化 - 目录结构:

Application/
config/
src/
views/

每个模块代码(类)都是从配置和视图模板中分离的,而不是强迫分开于控制器、模型、服务和其他对象。

这也意味着,理论上你想去掉在一个应用模块,只需要去掉一个单独的文件夹。但这并不意味着模块之间没有关联,例如:两个步骤的视图布局,就可以指定使用其他的模块。这只需要将两个模块的配置合并成一个。

新标准

作为一个新的主要版本,该框架也采用新标准,并中断对之前版本的兼容性,就像Symfony 2。

1.仅支持PHP 5.3,使用类的命名空间,不再使用下划线来分隔虚拟包。

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,而且不用全部重写。


文章评论

  • 登录后评论

点击排行