我试图按照这样的回答: 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