可重用捆绑软件的Symfony2 / Doctrine2模型类映射

伊安莱特

我目前正在尝试使用模型类与Symfony2创建可重用的包,但是我无法注册它们的映射,因此Doctrine可以识别它们。

我读到使用编译器传递可能是解决方案,所以我遵循了Symfony Cookbook(http://symfony.com/doc/current/cookbook/doctrine/mapping_model_classes.html)中的指南,并且还查看了FOSUserBundle的一些启发。

这是我到目前为止所做的:

class GPGoodsBundle extends Bundle{
    public function build(ContainerBuilder $container)
    {
        parent::build($container);
        $this->addRegisterMappingsPass($container);
    }

    /**
     * @param ContainerBuilder $container
     */
    private function addRegisterMappingsPass(ContainerBuilder $container)
    {
        $modelDir = realpath(__DIR__.'/Resources/config/doctrine/model');
        $mappings = array(
            $modelDir => 'GP\Bundle\GoodsBundle\Model',
        );
        $ormCompilerClass = 'Doctrine\Bundle\DoctrineBundle\DependencyInjection\Compiler\DoctrineOrmMappingsPass';
        if (class_exists($ormCompilerClass)) {
            $container->addCompilerPass(
                DoctrineOrmMappingsPass::createXmlMappingDriver(
                    $mappings,
                array('gp_goods.model_manager_name'),
                'gp_goods.backend_type_orm'
                )
            );
        }
    }
}

但是,当尝试迁移我的实体时(只是看它是否正常工作),结果如下:

$php app/console doctrine:migrations:diff
No mapping information to process.

我的实体存储在“ GP \ Bundle \ GoodsBundle \ Model”下,其映射存储在“ GP \ Bundle \ GoodsBundle \ Resources \ config \ doctrine \ model”下

所以我的问题是:创建可重复使用的包的好方法是什么?如何注册模型类的映射?

如果您需要任何其他信息,请随时询问!

谢谢您的帮助!

这是我的模型课程之一:

class Good implements GoodInterface{
    /**
     * @var integer
     */
    private $id;

    /**
     * @var string
     */
    protected $serial;

    /**
     * @var \DateTime
     */
    protected $manufacturedAt;

    /**
     * @var \DateTime
     */
    protected $deliveredAt;

    /**
     * @var \DateTime
     */
    protected $expiredAt;

    /**
     * @var string
     */
    protected $checkInterval;

    /**
     * @var string
     */
    protected $status;

    /**
     * @var string
     */
    protected $slug;

    /**
     * @var \DateTime
     */

    protected $createdAt;

    /**
     * @var \DateTime
     */

    protected $updatedAt;

    /**
     * @var \DateTime
     */

    protected $deletedAt;

    public function __construct(){
        $this->createdAt = new \DateTime("now");
        $this->status = 'good';
    }

    .... getters/setters .....
}

以及映射:

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping   xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">

    <entity name="GP\Bundle\GoodsBundle\Model\Good" table="good">

        <id name="id" type="integer" column="id">
            <generator strategy="AUTO"/>
        </id>

        <field name="serial" type="string" column="serial" length="255"/>

        <field name="manufacturedAt" type="date" column="manufactured_at"/>

        <field name="deliveredAt" type="date" column="delivered_at"/>

        <field name="expiredAt" type="date" column="expired_at"/>

        <field name="checkInterval" type="string" column="check_interval" length="255" nullable="true"/>

        <field name="status" type="string" column="status" length="255"/>

        <field name="slug" type="string" column="slug" length="255">
            <gedmo:slug fields="serial" unique="true" />
        </field>

        <field name="createdAt" type="datetime" column="created_at">
            <gedmo:timestampable on="create"/>
        </field>

        <field name="updatedAt" type="datetime" column="updated_at" nullable="true">
            <gedmo:timestampable on="update"/>
        </field>

        <field name="deletedAt" type="datetime" column="removed_at" nullable="true">
            <gedmo:soft-deleteable field-name="deletedAt"/>
        </field>

    </entity>
</doctrine-mapping>
伊安莱特

如果您的实体不在任何捆绑软件中,或者该位置不是通常的捆绑软件,则必须将config.yml中的“教义”部分更改为

doctrine:
    # ...
    orm:
        # ...
        auto_mapping: true

doctrine:
    # ...
    orm:
        # ...
        mappings:
            model: # replace `model` with whatever you want
                type: annotation # could be xml, yml, ...
                dir: %kernel.root_dir%/../path/to/your/model/directory
                prefix: Prefix\Namespace # replace with your actual namespace
                alias: Model # replace with the desired alias
                is_bundle: false

dir参数通知Doctrine在哪里查找映射定义。如果您使用的是注释,它将成为您的模型目录。否则,它将是您的xml / yml文件的目录。

在这种情况下,实体名称(可从Doctrine存储库访问)以Model开头,例如Model:User。它对应于参数alias

编辑配置文件时,请不要忘记清除缓存。

此外,在我的问题中,我写道我更改了Bundle类中的某些内容,但是它没有用,因为bundle将不会被其他项目重用。因此,我删除了所有内容。


请参阅此答案以获取更多详细信息:https : //stackoverflow.com/a/10001019/2720307

感谢Elnur Abdurrakhimov!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可重用捆绑软件的Symfony2 / Doctrine2模型类映射

来自分类Dev

在Symfony2上的Doctrine2 YML映射

来自分类Dev

Symfony2,Doctrine2,实体映射

来自分类Dev

Symfony2可重用实体

来自分类Dev

Symfony2 + Doctrine2中的CakePHP模型行为?

来自分类Dev

Symfony2:捆绑软件的替代验证器

来自分类Dev

如何降级symfony2捆绑软件knp_compnent?

来自分类Dev

我的可分发symfony2捆绑软件安装问题

来自分类Dev

Doctrine2与条件的关联映射

来自分类Dev

Symfony2可重用代码段功能

来自分类Dev

Symfony2 / Doctrine2:如何访问实体注释映射?

来自分类Dev

// Entity和// Entity的映射彼此不一致-Symfony2 / Doctrine2

来自分类Dev

Symfony2 FPNTag捆绑

来自分类Dev

symfony2 doctrine2:删除在过去的迁移中使用的实体类

来自分类Dev

实体映射注释中的Doctrine2 @ORM

来自分类Dev

单控制器或捆绑软件范围的Symfony2 kernel.controller事件

来自分类Dev

在symfony2核心和捆绑软件上运行phpunit测试

来自分类Dev

在对Symfony2捆绑软件进行单元测试时,如何显示PHP错误?

来自分类Dev

创建捆绑软件时出现Symfony2权限被拒绝错误

来自分类Dev

在开始捆绑软件之前应该学习Symfony2的高级概念吗?

来自分类Dev

在开始我的捆绑软件之前,应该学习Symfony2的高级概念吗?

来自分类Dev

Symfony2:带必需字段的条件捆绑软件配置部分

来自分类Dev

使用相同实体的两个捆绑软件Symfony2

来自分类Dev

symfony2 doctrine2与实体的批处理错误

来自分类Dev

Symfony2,Doctrine2,MySql,查看表

来自分类Dev

使用QueryBuilder的Symfony2 / Doctrine2 innerJoin

来自分类Dev

symfony2 doctrine2与实体的批处理错误

来自分类Dev

Symfony2 Doctrine2使用集合-表演

来自分类Dev

列的总和-Doctrine2 / Symfony2

Related 相关文章

  1. 1

    可重用捆绑软件的Symfony2 / Doctrine2模型类映射

  2. 2

    在Symfony2上的Doctrine2 YML映射

  3. 3

    Symfony2,Doctrine2,实体映射

  4. 4

    Symfony2可重用实体

  5. 5

    Symfony2 + Doctrine2中的CakePHP模型行为?

  6. 6

    Symfony2:捆绑软件的替代验证器

  7. 7

    如何降级symfony2捆绑软件knp_compnent?

  8. 8

    我的可分发symfony2捆绑软件安装问题

  9. 9

    Doctrine2与条件的关联映射

  10. 10

    Symfony2可重用代码段功能

  11. 11

    Symfony2 / Doctrine2:如何访问实体注释映射?

  12. 12

    // Entity和// Entity的映射彼此不一致-Symfony2 / Doctrine2

  13. 13

    Symfony2 FPNTag捆绑

  14. 14

    symfony2 doctrine2:删除在过去的迁移中使用的实体类

  15. 15

    实体映射注释中的Doctrine2 @ORM

  16. 16

    单控制器或捆绑软件范围的Symfony2 kernel.controller事件

  17. 17

    在symfony2核心和捆绑软件上运行phpunit测试

  18. 18

    在对Symfony2捆绑软件进行单元测试时,如何显示PHP错误?

  19. 19

    创建捆绑软件时出现Symfony2权限被拒绝错误

  20. 20

    在开始捆绑软件之前应该学习Symfony2的高级概念吗?

  21. 21

    在开始我的捆绑软件之前,应该学习Symfony2的高级概念吗?

  22. 22

    Symfony2:带必需字段的条件捆绑软件配置部分

  23. 23

    使用相同实体的两个捆绑软件Symfony2

  24. 24

    symfony2 doctrine2与实体的批处理错误

  25. 25

    Symfony2,Doctrine2,MySql,查看表

  26. 26

    使用QueryBuilder的Symfony2 / Doctrine2 innerJoin

  27. 27

    symfony2 doctrine2与实体的批处理错误

  28. 28

    Symfony2 Doctrine2使用集合-表演

  29. 29

    列的总和-Doctrine2 / Symfony2

热门标签

归档