我在RESTful Symfony2应用中使用了FOSRestBundle。我想通过使用JMS序列化实体。不幸的是,@ View注释没有任何效果。他们似乎根本没用过。但是当使用$ handler-> setExclusionStrategyGroups([' details'])时,它会正常工作。如何使@View()正常工作?
另一件事是在cgetAction()中我没有看到“数据”。我的回复中的json属性。我是否正确理解了数据'是集合的默认属性?
在我的控制器中,我已经定义了这些注释。它没有用。
/**
* @View(serializerGroups={"details"})
* @View(serializerEnableMaxDepthChecks=true)
*/
public function getAction($id)
{
return $this->getDoctrine()
->getRepository('MyFooBundle:Bar')
->find($id);
}
直接设置上下文组。这有效。 JMS上下文组有效。
public function getAction($id)
{
$bar = $this->getDoctrine()
->getRepository('MyFooBundle:Bar')
->find($id);
$handler = $this->get('fos_rest.view_handler');
$handler->setExclusionStrategyGroups(['details']);
$view = $this->view($bar, 200);
return $this->handleView($view);
}
否'数据' JSON响应中的容器属性。
/**
* @View(serializerGroups={"list"})
* @View(serializerEnableMaxDepthChecks=true)
*/
public function cgetAction(Request $request, ParamFetcherInterface $paramFetcher)
{
return $this->getDoctrine()
->getRepository('MyFooBundle:Bar')
->findAll();
}
我的Bar实体类的片段:
/**
* @ORM\ManyToOne(targetEntity="Baz", inversedBy="bar")
* @ORM\JoinColumn(name="baz_id", referencedColumnName="id")
* @JMS\MaxDepth(1)
* @JMS\Groups({"details"})
*/
private $baz;
config.yml snippet:
sensio_framework_extra:
view: { annotations: false }
fos_rest:
param_fetcher_listener: true
view:
view_response_listener: force
谢谢! 理查德