php - 多个命名空间中的 Doctrine2 实体

标签 php namespaces doctrine-orm entity zend-framework2

我正在使用 Zend Framework 2 开发一个 Web 应用程序,它将由多个模块组成,我想将实体类放在它们所属的模块中。

是否可以使用 Doctrine2 ORM 来做到这一点?通过阅读文档,似乎总是期望所有实体最多都在一个命名空间下,而我希望拥有

  • 模块 1\实体
  • 模块 2\实体
  • 等等...

这怎么可能?

感谢大家!

最佳答案

学说配置的第一步是在全局配置文件中设置连接。我个人在两个文件中执行此操作,第一个是 ./config/autoload/global.php,第二个是 ./config/autoload/local.php

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

./config/autoload/global.php

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

return array(
  'doctrine' => array(
    'connection' => array(
      'orm_default' => array(
        'params' => array(
          'user'     => 'root',
          'password' => ''
        )
      )
    )
  ),
);

第二步是为您的实体创建一个驱动程序。这是在模块命名空间基础上完成的。

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

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

那里发生了什么?好吧,我们通过添加一个新的驱动程序来扩展 doctrine['driver'] 数组。驱动程序具有我们模块的命名空间。为此,我们还需要在配置文件中定义命名空间。驱动程序定义该驱动程序的所有实体都在特定路径内。

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

最终这是为每个单独的模块完成的。因此,无论您使用的是 Filemanager\Entity\File 还是 PictureDb\Entity\File 类,两者都可以工作并且都将被加载。模块本质上是彼此独立的。尽管它们可以有依赖关系,或者可以很好地协同工作,但它们是独立运行的。因此,具有多个实体的多个模块完全没有问题;)

我希望这能让您对主题有所了解。对于实际工作示例,我写了两篇涵盖该主题的博客文章。

这些也可能对您有所帮助。

关于php - 多个命名空间中的 Doctrine2 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12721725/

相关文章:

php - 使用默认样式值编辑段落标签

php - 样式表不适用于 Codeigniter

python - 使用 lxml 在 python 中解析多个命名空间 XML

.net - .aspx 页面后面代码的自定义命名空间

symfony - Doctrine Timestampable 扩展不持久

postgresql - 使用 PostgreSQL : "SQLSTATE[42P01]: Undefined table: 7 ERROR: the relation does not exist" 的 Doctrine2 ManyToMany 关系

php - 具有多个where和join操作的Mysql Insert查询

php - 图 API Facebook 超时

c# - 在 C# 中使用计时器的错误

doctrine-orm - 为什么 DoctrineModule Cli 会介入 ZF2 应用程序的命令行请求?