Closed
Description
Q | A |
---|---|
Bug report? | yes |
Feature request? | no |
BC Break report? | no |
RFC? | no |
Symfony version | 4.1 |
if you have an entity that has a circular reference like:
https://github.com/boggs-love/api/blob/87205c3ce42d82f69f6749245755c5192c1f0e0c/src/Entity/RSVP.php
and you attempt to dispatch it:
$this->messenger->dispatch($rsvp);
You'll get the following exception:
A circular reference has been detected when serializing the object of class "App\Entity\RSVP" (configured limit: 1)
Full error message:
{
"message": "A circular reference has been detected when serializing the object of class \"App\\Entity\\RSVP\" (configured limit: 1)",
"code": 0,
"exception": "Symfony\\Component\\Serializer\\Exception\\CircularReferenceException",
"previous": null,
"file": "\/var\/www\/vendor\/symfony\/serializer\/Normalizer\/AbstractNormalizer.php",
"line": 197,
"trace": [
"\/var\/www\/vendor\/symfony\/serializer\/Normalizer\/AbstractObjectNormalizer.php(83): Symfony\\Component\\Serializer\\Normalizer\\AbstractNormalizer->handleCircularReference(Object(App\\Entity\\RSVP))",
"\/var\/www\/vendor\/symfony\/serializer\/Serializer.php(133): Symfony\\Component\\Serializer\\Normalizer\\AbstractObjectNormalizer->normalize(Object(App\\Entity\\RSVP), 'json', Array)",
"\/var\/www\/vendor\/symfony\/serializer\/Normalizer\/AbstractObjectNormalizer.php(119): Symfony\\Component\\Serializer\\Serializer->normalize(Object(App\\Entity\\RSVP), 'json', Array)",
"\/var\/www\/vendor\/symfony\/serializer\/Serializer.php(133): Symfony\\Component\\Serializer\\Normalizer\\AbstractObjectNormalizer->normalize(Object(App\\Entity\\Guest), 'json', Array)",
"\/var\/www\/vendor\/symfony\/serializer\/Serializer.php(143): Symfony\\Component\\Serializer\\Serializer->normalize(Object(App\\Entity\\Guest), 'json', Array)",
"\/var\/www\/vendor\/symfony\/serializer\/Normalizer\/AbstractObjectNormalizer.php(119): Symfony\\Component\\Serializer\\Serializer->normalize(Object(Doctrine\\ORM\\PersistentCollection), 'json', Array)",
"\/var\/www\/vendor\/symfony\/serializer\/Serializer.php(133): Symfony\\Component\\Serializer\\Normalizer\\AbstractObjectNormalizer->normalize(Object(App\\Entity\\RSVP), 'json', Array)",
"\/var\/www\/vendor\/symfony\/serializer\/Serializer.php(106): Symfony\\Component\\Serializer\\Serializer->normalize(Object(App\\Entity\\RSVP), 'json', Array)",
"\/var\/www\/vendor\/symfony\/messenger\/Transport\/Serialization\/Serializer.php(52): Symfony\\Component\\Serializer\\Serializer->serialize(Object(App\\Entity\\RSVP), 'json')",
"\/var\/www\/vendor\/symfony\/messenger\/Adapter\/AmqpExt\/AmqpSender.php(38): Symfony\\Component\\Messenger\\Transport\\Serialization\\Serializer->encode(Object(App\\Entity\\RSVP))",
"\/var\/www\/vendor\/symfony\/messenger\/Asynchronous\/Middleware\/SendMessageMiddleware.php(45): Symfony\\Component\\Messenger\\Adapter\\AmqpExt\\AmqpSender->send(Object(App\\Entity\\RSVP))",
"\/var\/www\/vendor\/symfony\/messenger\/MessageBus.php(56): Symfony\\Component\\Messenger\\Asynchronous\\Middleware\\SendMessageMiddleware->handle(Object(App\\Entity\\RSVP), Object(Closure))",
"\/var\/www\/vendor\/symfony\/messenger\/DataCollector\/MessengerDataCollector.php(64): Symfony\\Component\\Messenger\\MessageBus->Symfony\\Component\\Messenger\\{closure}(Object(App\\Entity\\RSVP))",
"\/var\/www\/vendor\/symfony\/messenger\/MessageBus.php(56): Symfony\\Component\\Messenger\\DataCollector\\MessengerDataCollector->handle(Object(App\\Entity\\RSVP), Object(Closure))",
"\/var\/www\/vendor\/symfony\/messenger\/Debug\/LoggingMiddleware.php(44): Symfony\\Component\\Messenger\\MessageBus->Symfony\\Component\\Messenger\\{closure}(Object(App\\Entity\\RSVP))",
"\/var\/www\/vendor\/symfony\/messenger\/MessageBus.php(56): Symfony\\Component\\Messenger\\Debug\\LoggingMiddleware->handle(Object(App\\Entity\\RSVP), Object(Closure))",
"\/var\/www\/vendor\/symfony\/messenger\/Middleware\/ValidationMiddleware.php(37): Symfony\\Component\\Messenger\\MessageBus->Symfony\\Component\\Messenger\\{closure}(Object(App\\Entity\\RSVP))",
"\/var\/www\/vendor\/symfony\/messenger\/MessageBus.php(56): Symfony\\Component\\Messenger\\Middleware\\ValidationMiddleware->handle(Object(App\\Entity\\RSVP), Object(Closure))",
"\/var\/www\/vendor\/symfony\/messenger\/MessageBus.php(40): Symfony\\Component\\Messenger\\MessageBus->Symfony\\Component\\Messenger\\{closure}(Object(App\\Entity\\RSVP))",
"\/var\/www\/src\/Controller\/RespondController.php(99): Symfony\\Component\\Messenger\\MessageBus->dispatch(Object(App\\Entity\\RSVP))",
"\/var\/www\/vendor\/symfony\/http-kernel\/HttpKernel.php(149): App\\Controller\\RespondController->createAction(Object(App\\Entity\\RSVP))",
"\/var\/www\/vendor\/symfony\/http-kernel\/HttpKernel.php(66): Symfony\\Component\\HttpKernel\\HttpKernel->handleRaw(Object(Symfony\\Component\\HttpFoundation\\Request), 1)",
"\/var\/www\/vendor\/symfony\/http-kernel\/Kernel.php(190): Symfony\\Component\\HttpKernel\\HttpKernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)",
"\/var\/www\/html\/index.php(44): Symfony\\Component\\HttpKernel\\Kernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request))",
"{main}"
]
}
It looks like this is because the serializer does not allow you to specify any $context
(see #26900)
Perhaps the routing config should also allow you to specify the serializer config?