我試圖按照這樣的回答: 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給與錯誤時,而不是當我用監聽器服務時。
在此先感謝
你能發佈你的實際代碼嗎? – Max 2015-04-02 15:28:20
我剛剛添加了代碼 – Mehdi 2015-04-02 15:40:19
@Mehdi是否設法將對象序列化爲額外字段(而不是字符串'someValue')?請參閱我的其他問題:https://stackoverflow.com/questions/45441456/jms-virtualproperty-with-argument-and-custom-listener-subscriber – StockBreak 2017-08-02 12:37:01