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

时间:2018-03-14 21:27:26

标签: php symfony symfony-3.4

我尝试添加EventSubscriber,但是当我在服务中注册订阅者时,我有一个错误:"未定义的偏移量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)
    {
    }
}

如果我删除了servies中的定义,则错误消失。

如果我的NoticePostSerializerSubscriber实现

  

\ JMS \串行\此事件\ EventSubscriberInterface

我有以下错误:

  

服务&#34; AppBundle \ Subscribers \ NoticePostSerializeSubscriber&#34;必须   实现接口   &#34; Symfony的\元器件\此事件\ EventSubscriberInterface&#34;

但如果我将界面更改为

  

的Symfony \元器件\此事件\ EventSubscriberInterface

我上面提到的错误

1 个答案:

答案 0 :(得分:1)

您正在以错误的方式注册。

对于活动订阅者,无需配置&#34; event&#34;在您的services.yml中,因为这是在getSubscribedEvents()内处理的,所以请删除您的&#34;事件&#34;属性。

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

tags:
  - { name: jms_serializer.event_subscriber }

接下来,您的班级必须实施JMS\Serializer\EventDispatcher\EventSubscriberInterface,而不是Symfony的EventSubscriberInterface