我正在开发一个我想同时提供 JSON 和 HTML 响应的应用程序。这是一个示例操作方法:
/**
* Lists all Boards entities.
*
* @Route("/", name="boards")
* @Method("GET")
* @Template()
*/
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('ScrumBoardServiceBundle:Boards')->findAll();
$acceptHeader = strtolower($this->getRequest()->headers->get('Accept'));
if ($acceptHeader === 'application/json') {
$serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new
JsonEncoder()));
$response = $serializer->serialize(array('success' => true, 'data' => array(
'entity' => $entities,
)), 'json');
$result = new Response($response, 200, array('Content-Type' => 'application/json'));
} else {
$result = array(
'entities' => $entities,
);
}
return $result;
}
这工作正常。如果您发送的 HTTP Accept 标头正好是 application/json
,您将返回 JSON。否则,您将获得通常的 hTML 视图。
这工作正常,但我有几十个动作。我宁愿不重复自己。我正在努力将这段代码重构为更通用的东西......但我也想知道这个问题是否已经被现有的 Symfony2 捆绑包解决了。也许带有注释的东西?还是配置设置?到目前为止,我还没有找到任何东西。但是我对 Symfony 太陌生了,我很容易错过一些东西。