Zend Framework 2 + Doctrine 2

41
我想开始使用Zend Framework,并想使用zf2版本。由于我使用Doctrine 2,你能否推荐一些教程来帮助我在zf2中进行集成?谢谢!

我非常喜欢这个演示。它是由Marco Pivetta(Doctrine核心团队和ZF2贡献者)编写的有关ZF2 + Doctrine集成的内容。 - Achim
2个回答

53

最后检查时间:ZF2.2.*、DoctrineORMModule 0.7.

官方模块

你可能希望通过 composer 加载 DoctrineORMModule

  • 在你的 composer.json 中添加 doctrine/doctrine-orm-module 到 require 部分(由于格式问题,示例代码在列表后面)
  • 运行 php composer.phar install
  • 创建目录 ./data/DoctrineORMModule/Proxy 并确保你的应用程序拥有写入权限
  • 通过你应用程序的 /config/autoload 配置 doctrine,以提供项目特定的设置(如数据库等)给模块
  • 在你的模块的 config.php 中配置 doctrine 的实体映射
  • 向你的项目中添加一个实体
  • DoctrineORMModuleDoctrineModule 添加到你的 config/application.config.php
  • 运行 cli 工具来生成数据表 ./vendor/bin/doctrine-module orm:schema-tool:create

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

示例代码

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',
                )
            )
        )
    ),
);

所有代码示例均为官方doctrine模块自述文件的一部分。

进一步阅读:

Marco Pivetta制作了一份精彩的关于doctrine-module使用的演示文稿,我建议每个使用此模块的人都去看一下。

Jason Grimes写了一篇教程,该教程被phpdeveloper.org推荐,在官方推出模块之前,应对安装doctrine可能会有所帮助。


谢谢...这个教程非常有帮助! - flux
此外,为了使phpunit与单元测试正常工作,您应该在TestConfig.php文件的模块数组中添加“DoctrineModule”和“DoctrineORMModule”,否则您将会收到以下错误提示:Zend\ServiceManager\Exception\ServiceNotFoundException: Zend\ServiceManager\ServiceManager::get无法获取或创建doctrine.entitymanager.orm_default实例。 - markdrake

5

更新:

我深入研究了一下,发现Zend Framework 2对Doctrine 2的本地支持仍在开发中。我建议关注这个Github Gist以监控进展如何。

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

我很高兴看到,关于ZF2对Doctrine的本地支持的大部分讨论都集中在灵活性上。我希望(显然其他人也是如此),在Zend Framework中使用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上找到的任何优秀资源。


2
Jon. L. 的网络研讨会真的很棒。它帮助我将 Doctrine2 和 Zend Framework 1.10.11 集成起来。但是你应该知道,Bisna 'glue' 来自 'Nolasnowbal' 只适用于 Doctrine 2.0。如果你想在 Zend Framework 项目中集成 Doctrine 2.1,请使用这个分支:https://github.com/guilhermeblanco/ZendFramework1-Doctrine2 如果你需要一个示例来帮助你使用新版本,请回复 :) - Kees Schepers
Kees 是绝对正确的。下面这篇文章“如何配置 Bisna 以与 Doctrine 2.1 一起使用…”(链接如下)帮助我很多,使 Bisna 升级工作无缝进行。 - cantera
堆栈链接:https://dev59.com/JFnUa4cB1Zd3GeqPd82_ - cantera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接