Zend Framework 2 + Doctrine 2

flu*_*lux 41 php doctrine zend-framework doctrine-orm zend-framework2

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

Sam*_*zog 53

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

官方模块

您可能想DoctrineORMModule通过composer 加载:

  • 添加doctrine/doctrine-orm-module到你的composer.json的require(格式问题列表bcs之后的示例代码)
  • php composer.phar install
  • 创建目录./data/DoctrineORMModule/Proxy并确保应用程序的写访问权限
  • 通过您的应用程序配置doctrine/config/autoload,为模块提供项目特定的设置(数据库等)
  • 在模块中配置doctrine的实体映射 config.php
  • 将实体添加到项目中
  • 添加DoctrineORMModuleDoctrineModuleconfig/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.*"                
    }  
}  
Run Code Online (Sandbox Code Playgroud)

实体设置

<?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'
                )
            )
        )
    )
);
Run Code Online (Sandbox Code Playgroud)

需要注意的是:你的成员的路径应该是完全合格的.最好的开始__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',
                )
            )
        )
    ),
);
Run Code Online (Sandbox Code Playgroud)

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

进一步阅读:

Marco Pivetta做了一个关于学说模块使用精彩演讲,我推荐给每个使用这个模块的人.

Jason Grimes在phpdeveloper.org上编写了一个教程,在有官方模块之前,它应该有助于安装doctrine.


can*_*era 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教程系列,以" Unit Testing Doctrine 2 Entities " 开头.请务必观看随后播放的视频,因为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上找到的任何好资源.

  • Jon的网络研讨会.L.真的很棒.它帮助我整合了Doctrine2和Zend Framework 1.10.11.但是你应该知道来自'Nolasnowbal'的Bisna'胶水'只适用于Doctrine 2.0.如果你想整合Doctrine 2.1.在Zend Framework项目中你应该使用这个fork:https://github.com/guilhermeblanco/ZendFramework1-Doctrine2如果你想通过一个例子来回复新版本的帮助:) (2认同)