覆盖DoctrineExtensions Taggable的序列化程序元数据

时间:2014-04-30 22:17:51

标签: php symfony doctrine-extensions

我可以覆盖标记对象序列化的方式吗?目前返回所有内容,我想排除id,created_at,updated_at和标记。我正在使用JMS Serializer软件包,Doctrine Extensions Taggable和FPN Tag Bundle。

这是我的设置,我正在考虑当实体的名称空间实际上是DoctrineExtensions可能是问题时,将Tag Bundle的父级设置为FPN。

大多数实体参数都在DoctrineExtensions \ Taggable \ Entity \ Tag(id,name,created_at等)中。我正在覆盖扩展DoctrineExtensions的FPN包。 DoctrineExtensions是一个库而不是一个包。

我该怎么做?

# app/config/config.yml
# ...
jms_serializer:
    metadata:
        auto_detection: true
        directories:
            TagBundle:
                namespace_prefix: "FPN\\TagBundle"
                path: "@MYTagBundle/Resources/config/serializer/fpn"


# MY\TagBundle\Resources\config\serializer\fpn\Entity.Tag.yml
FPN\TagBundle\Entity\Tag:
    exclusion_policy: ALL
    properties:
        id:
            expose: false
        name:
            expose: true
        created_at:
            expose: false
        updated_at:
            expose: false
        tagging:
            expose: false


# src/MY/TagBundle/Entity/Tag.php
<?php
namespace MY\TagBundle\Entity;

use FPN\TagBundle\Entity\Tag as BaseTag;

class Tag extends BaseTag
{
}


# vendor/fpn/tag-bundle/FPN/TagBundle/Entity/Tag.php
<?php

namespace FPN\TagBundle\Entity;

use DoctrineExtensions\Taggable\Entity\Tag as BaseTag;

class Tag extends BaseTag
{
    ....
}



# src/MY/TagBundle/MYTagBundle.php
<?php

namespace MY\TagBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class MYTagBundle extends Bundle
{
    // Is this unnecessary due to config.yml?
    public function getParent()
    {
        return 'FPNTagBundle';
    }
}

1 个答案:

答案 0 :(得分:1)

JMSSerializer要求您在与声明属性的名称空间相同的名称空间上定义序列化配置。

例如,假设您有一个Application\Bundle\AcmeBundle\Entity\BaseModel课程,其中$createdAt$updatedAt属性,以及一个继承Application\Bundle\AcmeBundle\Entity\Model的{​​{1}}课程具有BaseModel属性的类。在这种情况下,您需要2个序列化文件:一个名为$name的文件,其中包含Entity.BaseModel.xml$createdAt属性的序列化配置;和一个名为$updatedAt的{​​{1}}属性的配置。

您完全覆盖了FPNTagBundle的配置,但是您可以配置用于当前配置的序列化的唯一字段是Entity.Model.xml字段(在$name类中定义)。对于其他字段,您需要覆盖$slug

的配置目录

您的配置应该是这样的:

FPN\TagBundle\Entity\Tag