1

免责声明:我是 Doctrine 的新手

我目前正在构建一个需要极高模块化和灵活性的项目,并且有两个与之相关的问题。我的项目认为以下是“理想的”简化结构:

PackageA
    PackageA.php
    PackageA.orm.yml
PackageB
    PackageB.php
    PackageB.orm.yml
PackageC
    PackageC.php
    PackageC.orm.yml

因为这些包的添加或删除相当频繁,所以我的目标是让每个包定义自己的持久性映射(如上所示)。但是,我见过的学说配置示例将所有映射文件(xml 或 yml)放在一个目录中,在这种情况下,我的结构将是:

PackageA
    PackageA.php
PackageB
    PackageB.php
PackageC
    PackageC.php
Config
    PackageA.orm.yml
    PackageB.orm.yml
    PackageC.orm.yml

问题 1:是否可以将每个映射配置文件保存在不同的位置(如第一个示例),如果是这样,您如何使用这种配置实例化 EntityManager(我已阅读 Docs for Setup 并且不能似乎找到了这种能力)。

问题 2:我已经看到如何使用命令行工具创建模式,但理想情况下,我希望每个包都创建自己的模式,所以如果 PackageD 安装到系统上并且它的模式还不存在,它是能够即时创建它。Doctrine 有可能吗?

注意:我已经看到了使用 SchemaTool 按需创建模式的一些能力,但是创建所有模式似乎有限,是真的吗?

4

2 回答 2

0

Q1:也许可以,但你必须写在教义的核心代码中(不是最好的) Q2:是的,这就是使用 orm 的美妙之处。您必须为此运行命令行脚本,如教义工具参考

于 2013-12-30T00:05:35.353 回答
0

为有需要的人回答我自己的问题:

使用 SimplifiedYamlDriver 可以最轻松地拆分所有地图和实体的位置。这是一个简单的例子:

<?php

// Generate an array of your structure
$maps = array(
 'PackageA/Entities' => 'Your\PackageA\Entities',
 'PackageB/Entities' => 'Your\PackageB\Entities'
);

$config = new Doctrine\ORM\Configuration;
$driver = new Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver($maps);

$config->setMetadataDriverImpl($driver);

// ... finish configuration
// ... create connection params $conn

$em = new Doctrine\ORM\EntityManager($conn, $config);

上面的代码(加上伪代码)创建了一个新的实体管理器,可以访问更模块化结构的实体。请记住,在您的 Entity.orm.yml 映射文件中,您应该使用实际实体的完全限定名称空间。

更多详细信息:Yaml 映射

于 2014-03-24T18:31:15.620 回答