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 を初めて使用するので、簡単に何かを見落としている可能性があります。