Symfony2、JMS序列化程序、条令持久集合和FOSRestBundle
我试图弄清楚在使用FOSRestBundle和JMSSerializer时如何在视图中返回DBRef对象 所以在我的文件中Symfony2、JMS序列化程序、条令持久集合和FOSRestBundle,symfony,doctrine-orm,fosrestbundle,Symfony,Doctrine Orm,Fosrestbundle,我试图弄清楚在使用FOSRestBundle和JMSSerializer时如何在视图中返回DBRef对象 所以在我的文件中 class Advert { //... /** * @var Image[] * @MongoDB\ReferenceMany(targetDocument="AppBundle\Document\Image", cascade={"persist", "update", "remove"}) * @Serializer\G
class Advert {
//...
/**
* @var Image[]
* @MongoDB\ReferenceMany(targetDocument="AppBundle\Document\Image", cascade={"persist", "update", "remove"})
* @Serializer\Groups({"Default", "list", "details"})
* @Serializer\AccessType("public_method")
* @Serializer\Accessor(getter="getSerializableImages")
*/
protected $images;
//...
}
然后,我的控制器看起来像这样
/**
* @View(serializerGroups={"details"})
* @ParamConverter("advert", class="AppBundle:Advert")
* @param Request $request
* @param Advert $advert
* @return array
* @throws \Doctrine\ODM\MongoDB\LockException
*/
public function getAction(Request $request, Advert $advert)
{
$this->get('monolog.logger.advert')->info('Advert View', [
'documents' => [
'advert' => $advert->toLoggableArray(),
],
]);
$advertContact = new AdvertContact();
$advertContact->setAdvert($advert);
$form = $this->createForm('AppBundle\Form\AdvertContact\AdvertContactType', $advertContact, [
'action' => $this->generateUrl('advert_contact_new'),
'method' => 'post',
]);
return [
'advert' => $advert,
'contact_form' => $form->createView(),
];
}
我一直在到处寻找解决办法。我最接近的方法是使用JMS的@Accessor
注释,该方法对文档执行$this->images->toArray()
,但这不能正常工作,我担心反序列化
任何帮助都将不胜感激
getSerializableMages
返回什么?我猜如果它不是标量,那么序列化程序将不知道如何序列化it@mickadoo我试图按照其他帖子中的建议返回$this->images->toArray()
。它可以工作,但是返回了没有ID的DBRef。您可以尝试在图像中循环并为每个图像返回一个键值数组吗?我知道这可能不是您想要的自动序列化,但它可能会有问题getSerializableMages
返回什么?我猜如果它不是标量,那么序列化程序将不知道如何序列化it@mickadoo我试图按照其他帖子中的建议返回$this->images->toArray()
。它可以工作,但是返回了没有ID的DBRef。您可以尝试在图像中循环并为每个图像返回一个键值数组吗?我知道这可能不是您想要的自动序列化,但它可能很糟糕