首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多名称空间中的Doctrine2实体

多名称空间中的Doctrine2实体
EN

Stack Overflow用户
提问于 2012-10-04 06:47:21
回答 2查看 5.6K关注 0票数 9

我正在使用ZendFramework2开发一个web应用程序,它将由几个模块组成,我想将实体类放在它们所属的模块中。

使用Doctrine2 ORM可以做到这一点吗?通过读取文档,它似乎总是希望所有实体都位于最多一个名称空间之下,而我希望拥有

  • 模组1\实体
  • 模组2\实体
  • 等等..。

如何才能做到这一点?

感谢大家!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-04 08:17:55

原则配置的第一步是在您的全局配置文件中设置连接。我在两个文件中这样做,第一个是./config/autoload/global.php,第二个是./config/autoload/local.php

这有一个非常重要的原因,那就是任何包含local的内容都不会被发布到我的git存储库中。所以我的证件是安全的。

./config/autoload/global.php

代码语言:javascript
复制
return array(
  'doctrine' => array(
    'connection' => array(
      'orm_default' => array(
        'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
        'params' => array(
          'host'     => 'localhost',
          'port'     => '3306',
          'dbname'   => 'dbname'
        )
      )
    )
  ),
);

./config/autoload/local.php

代码语言:javascript
复制
return array(
  'doctrine' => array(
    'connection' => array(
      'orm_default' => array(
        'params' => array(
          'user'     => 'root',
          'password' => ''
        )
      )
    )
  ),
);

第二步是为实体创建一个驱动程序。这是在基础上完成的。

./modules/ModuleNamespace/config/module.config.php

代码语言:javascript
复制
<?php
namespace ModuleNamespace;

return array(
  //... some more configuration

  'doctrine' => array(
    'driver' => array(
      __NAMESPACE__ . '_driver' => array(
        'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
        'cache' => 'array',
        'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
      ),
      'orm_default' => array(
        'drivers' => array(
          __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
        )
      )
    )
  )
);

那里发生了什么事?我们通过添加一个新的驱动程序来扩展这个原则‘驱动程序’数组。驱动程序具有我们模块的命名空间。为此,我们还需要在配置文件中定义名称空间。驱动程序定义该驱动程序的所有实体都在某个路径内。

下一步是通过赋值扩展orm_defaults驱动程序,该赋值定义所有ModuleNamespace\Entity类都是从ModuleNamespace_driver配置加载的。

最终,这是针对每个模块完成的。因此,无论您是否有一个Filemanager\Entity\FilePictureDb\Entity\File类,它们都会工作,并且都会被加载。模块本质上是相互独立的。尽管它们可以有依赖关系,或者更确切地说,它们可以很好地协同工作,但它们可以独立工作。因此,具有多个实体的多个模块根本就没有问题;)

我希望这能让你对这个话题有一点了解。关于实际工作的例子,我写了两篇关于这个主题的博客文章。

  • 为Zend Framework 2安装Doctrine 2
  • 使用原则2的第一步

这些也可能对你有一点帮助。

票数 15
EN

Stack Overflow用户

发布于 2014-05-14 10:26:55

如果您正在使用DoctrineORMModule代理,则会将这些代理写入/data/DoctrineORMModule/Proxy。我不确定您是否必须手动创建文件夹并调整权限。

注意:由于某种原因,ZendSkeletonApplication没有设置名称空间!ZendSkeletonApplication /模块/应用程序/配置/ module.config.php

如果您忘记在每个中设置名称空间,您可能会得到这个错误!全班..。在链配置的命名空间ZfcUser\Entity、\Entity、ZfcUserDoctrineORM\Entity中未找到

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12721725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档