我尝试添加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
我上面提到的错误
答案 0 :(得分:1)
您正在以错误的方式注册。
对于活动订阅者,无需配置&#34; event&#34;在您的services.yml中,因为这是在getSubscribedEvents()
内处理的,所以请删除您的&#34;事件&#34;属性。
Jms序列化程序事件订阅者不是Symfony内核事件订阅者,因此请将您的服务标记更改为:
tags:
- { name: jms_serializer.event_subscriber }
接下来,您的班级必须实施JMS\Serializer\EventDispatcher\EventSubscriberInterface
,而不是Symfony的EventSubscriberInterface