使用JMSSerializerBundle进行序列化时如何将元素附加到Object?

时间:2012-09-02 19:08:24

标签: php serialization symfony

这是我想要做的:

  1. 我有一个对象,让我们说Article有两个属性idtitle
  2. 我想使用JMSSerializerBundle对它进行序列化,无论是XML还是JSON(但它应该适用于任何支持的格式)
  3. 序列化时,我想附加一些信息,以便序列化结果如下所示:

    <article>
      <id>1</id>
      <title>Lorem ipsum</title>
      <slug>1-lorem-ipsum</slug>
    </article>
    
  4. 如您所见,结果附加了<slug>元素,该元素实际上不是Article对象的属性。

    我试图深入研究代码,并尝试编写自定义序列化处理程序。我尝试了几个策略,比如追加动态对象属性,但它永远不会被序列化。我在stdClass中读到了类似的问题,我认为同样的问题适用,此属性不存在元数据,因为它在实例化后已动态添加到对象中。

    然后我决定创建一个新的XML元素,但是如果我返回我新创建的元素,那么这是唯一被序列化的元素,它会产生类似的结果:

        <article>
          <slug>1-lorem-ipsum</slug>
        </article>
    

    我也尝试返回整个文档,但是会导致错误(预计会出现DOMElement)。

    我很困惑,任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,自动将Link rel添加到每个序列化对象。我最终决定在要序列化的实体中创建一个Link实体和一个关联。 你可以用slug做同样的事情。

这具有额外的优点,即能够动态编辑链接,例如,网址已更改。