Я пытаюсь создать EventSubscriber
для различных событий сериализации, используя Symfony 3.4.21
, JMSSerializer 2.1.0
и JMSSerializerBundle 3.0.0
.
Проблема в том, что подписчики работают, только если они не зарегистрированы дляконкретный тип. Почему это так?
Моя настройка:
// src/AppBundle\EventListener\SerializationEventSubscriber.php
use JMS\Serializer\EventDispatcher\Events;
use JMS\Serializer\EventDispatcher\EventSubscriberInterface;
use JMS\Serializer\EventDispatcher\PreSerializeEvent;
use JMS\Serializer\EventDispatcher\ObjectEvent;
class SerializationEventSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return array(
// Subscribe with NO specific class
array('event' => Events::PRE_SERIALIZE, 'method' => 'onPreSerialize_NoClass'),
array('event' => Events::POST_DESERIALIZE, 'method' => 'onPostDeserialize_NoClass'),
// Subscribe WITH specific class
array('event' => Events::PRE_SERIALIZE, 'method' => 'onPreSerialize_Class', 'class' => 'AppBundle\Entity\MyEntity'),
array('event' => Events::POST_DESERIALIZE, 'method' => 'onPostDeserialize_Class', 'class' => 'AppBundle\Entity\MyEntity'),
);
}
public function onPreSerialize_NoClass(PreSerializeEvent $event) {
// log...
}
public function onPostDeserialize_NoClass(PreSerializeEvent $event) {
// log...
}
public function onPreSerialize_Class(PreSerializeEvent $event) {
// log...
}
public function onPreSerialize_Class(PreSerializeEvent $event) {
// log...
}
}
// app/config/services.yml
AppBundle\EventListener\SerializationEventSubscriber:
tags:
- { name: "jms_serializer.event_subscriber" }
Хотя первые два обработчика (определенные без определенного класса) вызываются правильно, два обработчика с определенным классом не называется .
Если я проверяю класс объекта события в обработчиках ..._NoClass
, он полностью соответствует типу, используемому в обработчиках ..._Class
.
Согласно документам не должно быть проблем с определением обработчика для определенного класса. Что не так с моим конфигом?