Symfony и JMSSerialier, не могу добавить прослушиватель для добавления дополнительных полей

Я пытался следовать этому ответу:
Добавьте дополнительные поля, используя пакет JMS Serializer

но без изменений ..

Я хочу добавить дополнительные поля в сериализованную сущность (в 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');
}
}

и вызов в моем контроллере:

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

Я также добавляю следующую декларацию сервиса:

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

У меня объявлен другой сервис, и когда я изменяю его объявление, Symfony дает и ошибка, а не когда я делаю это со службой слушателя.

заранее спасибо

1

Решение

Возможно, вы забыли добавить тег. Ваше объявление слушателя должно выглядеть примерно так

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]