JMSSerializer 事件不适用于具体类型
JMSSerializer events do not work for concrete types
我正在尝试使用 Symfony 3.4.21
、JMSSerializer 2.1.0
和 JMSSerializerBundle 3.0.0
.
为不同的序列化事件创建 EventSubscriber
问题是,订阅者只有在没有注册具体类型的情况下才能工作。 这是为什么?
我的设置:
// 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" }
虽然前两个处理程序(没有特定 class 定义)被正确调用,但具有特定 class 的两个处理程序未被调用。
如果我检查 ..._NoClass
处理程序中事件对象的 class,它与 ..._Class
处理程序中使用的类型完全匹配。
根据 docs 定义特定 class 的处理程序应该没有问题。 我的配置有什么问题?
这似乎是 JMSSerializerBundle 3.0.0
中的错误。 3.1.0
的更新解决了这个问题。
我正在尝试使用 Symfony 3.4.21
、JMSSerializer 2.1.0
和 JMSSerializerBundle 3.0.0
.
EventSubscriber
问题是,订阅者只有在没有注册具体类型的情况下才能工作。 这是为什么?
我的设置:
// 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" }
虽然前两个处理程序(没有特定 class 定义)被正确调用,但具有特定 class 的两个处理程序未被调用。
如果我检查 ..._NoClass
处理程序中事件对象的 class,它与 ..._Class
处理程序中使用的类型完全匹配。
根据 docs 定义特定 class 的处理程序应该没有问题。 我的配置有什么问题?
这似乎是 JMSSerializerBundle 3.0.0
中的错误。 3.1.0
的更新解决了这个问题。