События JMSSerializer не работают для конкретных типов - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь создать 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.

Согласно документам не должно быть проблем с определением обработчика для определенного класса. Что не так с моим конфигом?

1 Ответ

0 голосов
/ 21 января 2019

Похоже, это ошибка в JMSSerializerBundle 3.0.0. Обновление до 3.1.0 решило проблему.

...