0

我正在寻找一个简单而愚蠢的解决方案,以更改序列化字段的输出以替换几种模式(用于用户消息等)。

不幸的是,自定义反/序列化处理程序的使用破坏了我所有的策略。我被迫手动返回所有序列化数据。

模型类:

//src/Acme/DemoBundle/Model/Tiger

class Tiger implements WildAnimalInterface
{
    /**
     * @var integer
     * @Expose
     */
    protected $id;

    /**
     * @var string
     * @Expose
     * @Type('user_message')
     */
    protected $text;

    /**
     * @var integer
     * @Exclude
     */
    protected $dangerLevel;

    ...
}

处理程序类:

class UserMessageHandler 
{  
    ...

    public function serialize(VisitorInterface $visitor, 
                              WildAnimalInterface $wildAnimal, 
                              $type, 
                              $visited)  
    {  
        // Hello {{username}}, I'm a Tiger ROOARRR!
        $text = $wildAnimal->getText(); 

        // (my custom replacement logic, it works already)

        // Hello Joe Schmoe, I'm a Tiger ROOARRR!
        return $text;  // < Overwrites all rules and returns only text!
    }
 }
4

2 回答 2

2

我不太确定你到底是什么意思,但你不能使用 @postserialize 和 @postdeserialize ( http://jmsyst.com/libs/serializer/master/reference/annotations#postserialize ) 注释吗?

于 2013-12-18T08:46:01.740 回答
1

我遇到了同样的问题,终于找到了解决方案,我在这里解释一下:Format input and output fields with JMSSerializer (handle single property)

于 2013-12-20T11:09:34.063 回答