I am trying to return a JSON object ('Module') using the ManyToOne link to Sonata \ MediaBundle \ Entity via FOSRestBundle and JMS Serializer. How can I do it?
Here is the hack I made, but I don't think this is the best practice.
class Module { ... private $heroImage; ... } class Media extends BaseMedia { ... public function getUrlMethod() { global $kernel; $imageProvider = $kernel->getContainer()->get('sonata.media.provider.image'); return $imageProvider->generatePublicUrl($this, 'reference'); } ... }
Thank you!
EDIT Thanks to Tautrimas Payarskas and the message he mentions. Here is the class.
<?php namespace AXO\APIBundle\Listener\Serialization; use JMS\DiExtraBundle\Annotation\Service; use JMS\DiExtraBundle\Annotation\Tag; use JMS\DiExtraBundle\Annotation\Inject; use JMS\DiExtraBundle\Annotation\InjectParams; use JMS\Serializer\EventDispatcher\EventSubscriberInterface; use JMS\Serializer\EventDispatcher\ObjectEvent; use JMS\Serializer\GraphNavigator; class SerializationListener implements EventSubscriberInterface { static public function getSubscribedEvents() { return array( array('event' => 'serializer.post_serialize', 'class' => 'Application\Sonata\MediaBundle\Entity\Media', 'method' => 'onPostSerialize'), ); } public function onPostSerialize(ObjectEvent $event) { global $kernel; $imageProvider = $kernel->getContainer()->get('sonata.media.provider.image'); $event->getVisitor()->addData('url',$imageProvider->generatePublicUrl($event->getObject(), 'reference')); } }
jms jmsserializerbundle symfony-sonata
hongpang
source share