2015-04-02 58 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