php - Symfony 和 JMSSerialier,无法添加监听器来添加额外字段

标签 php json symfony jms-serializer

我尝试遵循这个答案: Add extra fields using JMS Serializer bundle

但没有改变..

我想在发送之前向序列化实体(以 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');
    }
}

以及我的 Controller 中的调用:

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

我还添加了以下服务声明:

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

我声明了另一个服务,当我更改其声明名称 symfony 时给出错误,而不是当我使用监听器服务执行此操作时。

提前致谢

最佳答案

$visitor = $event->getVisitor();
$visitor->visitProperty(new StaticPropertyMetadata('', 'some_key', null),'some_key');

addData 方法适用于旧版本的 JMS Serializer。不要忘记导入StaticPropertyMetadata

关于php - Symfony 和 JMSSerialier,无法添加监听器来添加额外字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29416577/

相关文章:

javascript - 对于每个 ajax 请求,PHP 根据创建行的时间返回不同的结果

php - 将行与 mysql 中的最新日期连接起来

php - 在 Woocommerce 中添加多个自定义订单状态

PHP Mysql表信息

javascript - 如何从 zul ZK 中的 Controller 获取 json 对象?

xml - Scala 使用 JSON 和/或 XML 模板

java - 如何将 JSON 字段映射到自定义对象属性?

php - Symfony 找不到路线

symfony - 更改 Symfony 3 Controller 文件夹

php - 从 Symfony 进程执行 python 失败