Symfony 3.1.7 + FOSRestBundle最新版本
<?php
namespace PM\ApiBundle\Controller;
...
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\View\View;
class ArticlesController extends FOSRestController
{
/**
* @ApiDoc(
* section="articles",
* resource=true,
* description="Get articles published"
* )
* @Rest\View(serializerGroups={"article"})
* @Rest\Get("/articles")
*/
public function getArticlesAction(Request $request)
{
$articles = $this->getDoctrine()
->getManager()
->getRepository('PMPlatformBundle:Article')
->findAllDateDesc();
/* @var $articles Article[] */
return $articles;
}
然后在我的文章实体中,我使用正确的用法语句添加了这个注释@Groups({“article”})。
我得到的Whit默认序列化器:
[
[],
[]
]
Whit JMS序列化程序(包)我得到:
{
"0": {},
"1": {}
}
(我在db中有两篇文章) 似乎“文章”组似乎无法识别。当我使用默认的序列化程序而没有这个注释时,我得到一个循环错误。
怎么了?
[编辑]与
相同的行为/**
* @ApiDoc(
* section="articles",
* resource=true,
* description="Get articles published"
* )
* @Rest\View()
* @Rest\Get("/articles")
*/
public function getArticlesAction(Request $request)
{
$context = new Context();
$context->addGroup('article');
$articles = $this->getDoctrine()
->getManager()
->getRepository('PMPlatformBundle:Article')
->findAllDateDesc();
/* @var $articles Article[] */
$view = $this->view($articles, 200);
$view->setContext($context);
return $view;
}
答案仍然是空的。
答案 0 :(得分:2)
好的我使用JMS序列化程序修复它:
use JMS\Serializer\SerializationContext;
use JMS\Serializer\SerializerBuilder;
class ArticlesController extends FOSRestController
{
/**
* @ApiDoc(
* section="articles",
* resource=true,
* description="Get articles published"
* )
* @Rest\View()
* @Rest\Get("/articles")
*/
public function getArticlesAction(Request $request)
{
$serializer = SerializerBuilder::create()->build();
$articles = $this->getDoctrine()
->getManager()
->getRepository('PMPlatformBundle:Article')
->findAllDateDesc();
/* @var $articles Article[] */
return $serializer->serialize($articles, 'json', SerializationContext::create()->setGroups(array('article')));
}
现在群组注释工作正常。
答案 1 :(得分:2)
您可以保留symfony的默认序列化程序。不需要JMSSerializer。
您可能忘记在config.yml中激活序列化程序的注释(https://symfony.com/doc/current/serializer.html#using-serialization-groups-annotations)
require 'rspec/rails'
有必要在config.yml中强制使用view_response_listener(http://symfony.com/doc/master/bundles/FOSRestBundle/3-listener-support.html,http://symfony.com/doc/master/bundles/FOSRestBundle/view_response_listener.html)
#app/config/config.yml
framework:
....
serializer: { enable_annotations: true }
这应该有用!
答案 2 :(得分:0)
使用建议的答案
$serializer = SerializerBuilder::create()->build();
return $serializer->serialize($collection, 'json', SerializationContext::create()->setGroups(['group']));
将JSON作为字符串返回给我。要解决您的问题,您必须在config.yml
文件中包含以下内容:
jms_serializer:
metadata:
auto_detection: true
这是它如何识别您在实体文件中使用注释指定的映射。有关详细信息,请访问:docs。有了这个,您可以根据需要使用@View(serializerGroups={"group"})
注释。
P.S。 Symfony 3.2.2; JMSSerializer 1.1; FOSRestBundle 2.1
答案 3 :(得分:0)
尝试php bin/console cache:clear