gpt4 book ai didi

jms - FOSRestbundle、JMS Serializer 和 SonataMediaBundle 返回图像的公共(public) url

转载 作者:行者123 更新时间:2023-12-04 08:49:12 27 4
gpt4 key购买 nike

我正在尝试通过 FOSRestBundle 和 JMS Serializer 返回一个带有指向 Sonata\MediaBundle\Entity 的 ManyToOne 链接的 JSON 对象('Module')。我该怎么做呢?

这是我做的一个黑客,但不认为这是最好的做法。

class Module
{
...
/**
* @var Application\Sonata\MediaBundle\Entity\Media
*
* @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media", inversedBy="module")
* @ORM\JoinColumn(name="hero_image_id", referencedColumnName="id")
* @JMS\Expose()
*/
private $heroImage;
...
}

class Media extends BaseMedia
{
...
/**
* A Quick hack not the best method.
*
* @JMS\VirtualProperty
* @JMS\SerializedName("url")
*
* @return string
*/
public function getUrlMethod()
{
global $kernel;

$imageProvider = $kernel->getContainer()->get('sonata.media.provider.image');

return $imageProvider->generatePublicUrl($this, 'reference');
}
...
}

谢谢你!

编辑
感谢 Tautrimas Pajarskas 和他提到的帖子。
这是类(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;

/**
* Add data after serialization
*
* @Service("axo.listener.serializationlistener")
* @Tag("jms_serializer.event_subscriber")
*/
class SerializationListener implements EventSubscriberInterface
{

/**
* @inheritdoc
*/
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'));
}
}

最佳答案

您可能想查看 Add extra fields using JMS Serializer bundle正如它有一个例子,关于如何向依赖于外部类的序列化数据添加额外的字段。

关于jms - FOSRestbundle、JMS Serializer 和 SonataMediaBundle 返回图像的公共(public) url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18956983/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com