41

我想开始使用 Zend Framework 进行开发,我想使用 zf2。由于我使用 Doctrine 2,您能否建议一些教程来帮助我将其集成到 zf2 中?谢谢!

4

2 回答 2

53

上次检查:ZF2.2.*,DoctrineORMModule 0.7。

官方模块

您可能想DoctrineORMModule通过作曲家加载:

  • 添加doctrine/doctrine-orm-module到您的composer.json的要求(格式问题列表 bcs 之后的示例代码)
  • php composer.phar install
  • 创建目录./data/DoctrineORMModule/Proxy并确保您的应用程序的写入权限
  • 通过您的应用程序配置教义/config/autoload,为模块提供项目特定的设置(数据库等)
  • 在你的模块中配置学说的实体映射config.php
  • 将实体添加到您的项目
  • 添加DoctrineORMModuleDoctrineModule到您的config/application.config.php
  • 运行 cli 工具来生成你的表./vendor/bin/doctrine-module orm:schema-tool:create

我强烈建议您不要使用 composer,因为它是一种安装依赖项并设置自动加载器的简单方法。ZF2 默认通过 composer 发布。

示例代码

作曲家.json

{  
    "require" : {  
        "php": ">=5.3.3",  
        "zendframework/zendframework": "2.*"                
        "doctrine/doctrine-orm-module": "0.*"                
    }  
}  

实体设置

<?php
return array(
    'doctrine' => array(
        'driver' => array(
            // defines an annotation driver with two paths, and names it `my_annotation_driver`
            'my_annotation_driver' => array(
                'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                'cache' => 'array',
                'paths' => array(
                    'path/to/my/entities',
                    'another/path'
                ),
            ),

            // default metadata driver, aggregates all other drivers into a single one.
            // Override `orm_default` only if you know what you're doing
            'orm_default' => array(
                'drivers' => array(
                    // register `my_annotation_driver` for any entity under namespace `My\Namespace`
                    'My\Namespace' => 'my_annotation_driver'
                )
            )
        )
    )
);

需要注意的问题:通往实体的路径应该是完全合格的。最好从 开始__DIR__,否则事情会中断(每个新项目我都想知道为什么命令行工具在我发现这个错误之前不起作用......;)

连接设置

<?php
return array(
    'doctrine' => array(
        'connection' => array(
            // default connection name
            'orm_default' => array(
                'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
                'params' => array(
                    'host'     => 'localhost',
                    'port'     => '3306',
                    'user'     => 'username',
                    'password' => 'password',
                    'dbname'   => 'database',
                )
            )
        )
    ),
);

所有代码示例都是官方学说模块自述文件的一部分

延伸阅读:

Marco Pivetta 做了一个关于教义模块用法的精彩演讲,我向所有使用这个模块的人推荐。

Jason Grimes wrote a tutorial featured on phpdeveloper.org which should help installing doctrine, before there was an official module.

于 2012-02-01T07:21:05.470 回答
5

更新:

我对此进行了更深入的研究,听起来 Zend Framework 2 中对 Doctrine 2 的原生支持仍在进行中。我建议密切关注这个Github Gist以监控进展情况。

同时,您可能想查看 Michiel Staessen 的存储库zf2-doctrine-provider。目前还没有它的文档,但是一旦您了解 Bisna 库在 ZF 1.x 中的工作方式,这将是合乎逻辑的下一步。

我很高兴看到围绕 ZF2 对 Doctrine 的本机支持的大部分讨论都集中在灵活性上。我希望(显然也有其他人)在 Zend 框架中使用 Doctrine 不会是一个非此即彼的选择,而是构建一个坚实而灵活的域模型的特定部分的一种选择。

原帖:

幸运的是,大多数学习 ZF 1.x + Doctrine 的主要资源都考虑了向 ZF2 的迁移。它们不包括对 ZF2 中 Doctrine 的原生支持,但它们应该可以帮助您开始了解许多主要原则。

Zendcasts 有一个出色的 Doctrine 2 教程系列,从“单元测试 Doctrine 2 实体”开始。请务必观看随后的视频,因为 Jon L.(演示者)在观看视频的过程中继续采用最佳实践。

Zend Technologies 有一个名为“ Zend Framework v1 + Doctrine v2 ”的权威网络研讨会。演讲者具体讨论了他们如何构建示例应用程序以适应 ZF2 迁移。

至于 ZF2 原生支持,我也没有找到任何东西。Rob Allen 著名的ZF2 教程使用 Zend\Db,并且 Nick Belhomme 的“ Zend Framework 2.0 Cookbook ”中还没有涉及 Doctrine。

祝您入门好运,请发布您在 ZF2/D2 上找到的任何好的资源。

于 2011-10-24T04:35:27.803 回答