如何使用FOSRestBundle使@View注释工作

时间:2015-03-18 14:39:52

标签: symfony fosrestbundle jmsserializerbundle

我在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

谢谢! 理查德

0 个答案:

没有答案