2015-04-02 19 views
1

我试图按照这样的回答: Add extra fields using JMS Serializer bundleSymfony和JMSSerialier,不能添加监听器添加额外的字段

,但没有改变..

我要额外字段添加到序列化的实体(在json)发送之前。有什么我错过了吗?

这里是我的听众:

<?php 

namespace My\MyBundle\Listener; 

use JMS\DiExtraBundle\Annotation\Service; 
use JMS\DiExtraBundle\Annotation\Tag; 
use JMS\DiExtraBundle\Annotation\Inject; 
use JMS\DiExtraBundle\Annotation\InjectParams; 
use Symfony\Component\HttpKernel\Event\PostResponseEvent; 
use My\MyBundle\Entity\Dossier; 
use JMS\Serializer\Handler\SubscribingHandlerInterface; 
use JMS\Serializer\EventDispatcher\EventSubscriberInterface; 
use JMS\Serializer\EventDispatcher\PreSerializeEvent; 
use JMS\Serializer\EventDispatcher\ObjectEvent; 
use JMS\Serializer\GraphNavigator; 
use JMS\Serializer\JsonSerializationVisitor; 

/** 
* Add data after serialization 
* 
* @Service("my.listener.serializationlistener") 
* @Tag("jms_serializer.event_subscriber") 
*/ 
class SerializationListener implements EventSubscriberInterface 
{ 

    /** 
    * @inheritdoc 
    */ 
    static public function getSubscribedEvents() 
    { 
     return array(
      array('event' => 'serializer.post_serialize', 'class' => 'My\MyBundle\Entity\Dossier', 'method' => 'onPostSerialize'), 
     ); 
    } 

    public function onPostSerialize(ObjectEvent $event) 
    { 
     $event->getVisitor()->addData('someKey','someValue'); 
    } 
} 

,并在我的控制器调用:我还有一个服务宣布

services: 
    my.mybundle.listener: 
     class: My\MyBundle\Listener\SerializationListener 

$serializer = $this->container->get('jms_serializer'); 
$res = $serializer->serialize($dossier, 'json'); 

我还添加以下服务声明当我改变它的声明名称symfony给与错误时,而不是当我用监听器服务时。

在此先感谢

+0

你能发布你的实际代码吗? – Max 2015-04-02 15:28:20

+0

我刚刚添加了代码 – Mehdi 2015-04-02 15:40:19

+0

@Mehdi是否设法将对象序列化为额外字段(而不是字符串'someValue')?请参阅我的其他问题:https://stackoverflow.com/questions/45441456/jms-virtualproperty-with-argument-and-custom-listener-subscriber – StockBreak 2017-08-02 12:37:01

回答

1

也许,你忘了添加一个标签。你的听众声明应该看起来像这样

services: 
    my.bundle.listener: 
     class: My\MyBundle\Listener\SerializationListener 
     tags: 
      - { name: jms_serializer.event_subscriber } 
+0

以防万一..我刚刚添加了一个新的事件在我的听众(post_serialize)。我已经有pre_serialize并没有发生后事件..清理缓存做了伎俩.. – Delphine 2016-04-21 09:24:04