JMS 序列化程序,添加事件订阅者时出错

JMS serializer, error during adding event subscriber

我尝试添加 EventSubscriber,但是当我在服务中注册订阅者时出现错误:"undefined offset 0"

//services.yml

AppBundle\Subscribers\NoticePostSerializeSubscriber:
    tags:
      - { name: kernel.event_subscriber, event: serializer.post_serialize}

订阅者

<?php
namespace AppBundle\Subscribers;

use JMS\Serializer\EventDispatcher\ObjectEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class NoticePostSerializeSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            array(
                'event' => 'serializer.post_serialize',
                'method' => 'onPostSerialize',
                'class' => 'AppBundle\Entity\Notice', // if no class, subscribe to every serialization
                'format' => 'json', // optional format
                'priority' => 0, // optional priority
            ),
        );
    }

    public function onPostSerialize(ObjectEvent $event)
    {
    }
}

如果我删除服务中的定义,错误就会消失。

如果我的 NoticePostSerializerSubscriber 实现

\JMS\Serializer\EventDispatcher\EventSubscriberInterface

我有以下错误:

Service "AppBundle\Subscribers\NoticePostSerializeSubscriber" must implement interface "Symfony\Component\EventDispatcher\EventSubscriberInterface".

但是如果我将界面更改为

Symfony\Component\EventDispatcher\EventSubscriberInterface

我有上面提到的错误

你注册的方式不对。

对于事件订阅者,无需在您的 services.yml 中配置 "event",因为这是在 getSubscribedEvents() 中处理的,因此删除您的 "event" 属性.

Jms 序列化程序事件订阅者不是 Symfony 内核事件订阅者,因此请将您的服务标签更改为:

tags:
  - { name: jms_serializer.event_subscriber }

接下来,您的 class 必须实现 JMS\Serializer\EventDispatcher\EventSubscriberInterface,而不是 Symfony 的 EventSubscriberInterface