diff --git a/src/Bridge/Doctrine/EventListener/PublishMercureUpdatesListener.php b/src/Bridge/Doctrine/EventListener/PublishMercureUpdatesListener.php
index f3bbb744a94..bd8ad5f156c 100644
--- a/src/Bridge/Doctrine/EventListener/PublishMercureUpdatesListener.php
+++ b/src/Bridge/Doctrine/EventListener/PublishMercureUpdatesListener.php
@@ -47,8 +47,9 @@ final class PublishMercureUpdatesListener
private $createdEntities;
private $updatedEntities;
private $deletedEntities;
+ private $formats;
- public function __construct(ResourceClassResolverInterface $resourceClassResolver, IriConverterInterface $iriConverter, ResourceMetadataFactoryInterface $resourceMetadataFactory, SerializerInterface $serializer, MessageBusInterface $messageBus = null, callable $publisher = null, ExpressionLanguage $expressionLanguage = null)
+ public function __construct(ResourceClassResolverInterface $resourceClassResolver, IriConverterInterface $iriConverter, ResourceMetadataFactoryInterface $resourceMetadataFactory, SerializerInterface $serializer, MessageBusInterface $messageBus = null, callable $publisher = null, array $formats, ExpressionLanguage $expressionLanguage = null)
{
if (null === $messageBus && null === $publisher) {
throw new InvalidArgumentException('A message bus or a publisher must be provided.');
@@ -60,6 +61,7 @@ public function __construct(ResourceClassResolverInterface $resourceClassResolve
$this->serializer = $serializer;
$this->messageBus = $messageBus;
$this->publisher = $publisher;
+ $this->formats = $formats;
$this->expressionLanguage = $expressionLanguage ?? class_exists(ExpressionLanguage::class) ? new ExpressionLanguage() : null;
$this->reset();
}
@@ -168,8 +170,13 @@ private function publishUpdate($entity, array $targets): void
$iri = $entity->iri;
$data = json_encode(['@id' => $entity->id]);
} else {
+ // publish the message in the request's format
+ // respect the entity's serializer context
+ $resourceClass = $this->getObjectClass($entity);
+ $context = $this->resourceMetadataFactory->create($resourceClass)->getAttribute('normalization_context', []);
+
$iri = $this->iriConverter->getIriFromItem($entity, UrlGeneratorInterface::ABS_URL);
- $data = $this->serializer->serialize($entity, 'jsonld');
+ $data = $this->serializer->serialize($entity, key($this->formats), $context);
}
$update = new Update($iri, $data, $targets);
diff --git a/src/Bridge/Symfony/Bundle/Resources/config/doctrine_orm_mercure_publisher.xml b/src/Bridge/Symfony/Bundle/Resources/config/doctrine_orm_mercure_publisher.xml
index bf806e60986..1c218e13287 100644
--- a/src/Bridge/Symfony/Bundle/Resources/config/doctrine_orm_mercure_publisher.xml
+++ b/src/Bridge/Symfony/Bundle/Resources/config/doctrine_orm_mercure_publisher.xml
@@ -15,6 +15,7 @@
+ %api_platform.formats%