多个命名空间中的Doctrine2实体



我正在使用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' => 'DoctrineDBALDriverPDOMySqlDriver',
'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' => 'DoctrineORMMappingDriverAnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . 'Entity' => __NAMESPACE__ . '_driver'
)
)
)
)
);

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

完成的下一步是通过一个赋值来扩展orm_defaults驱动程序,该赋值定义了从ModuleNamespace_driver配置加载所有ModuleNamespaceEntity类。

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

我希望这能让你稍微理解一下这个话题。对于现场工作的例子,我写了两篇关于这个主题的博客文章。

  • 为Zend Framework 2安装条令2
  • 原则2的第一步

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

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

收件人:由于某些原因,ZendSkeletonApplication在出厂时没有设置名称空间!ZendSkeletonApplication/module/Application/config/module.config.php

如果您忘记在每个模块.config.php中设置命名空间,则可能会出现此错误!课堂。。。在链配置的命名空间ZfcUser\Entity,\Entity、ZfcUserDoctrineORM\Entity中找不到

相关内容

  • 没有找到相关文章

最新更新