Symfony Best Practice - 実践編 Chapter5-2-
前回
いじった結果は随時GitHubにあげていきます。
あえて@Template
アノテーションを使ってみる
ベストプラクティスでは「使ってはいけない」とされている@Template
アノテーションをあえて使ってみる。
なるほど。すっきりはするけど、Responseオブジェクトを返しているというよりは、arrayを返しているようにしか見えないから、「なんでこれで画面が表示されるんだろう?」となるのは理解出来る。
しかも、アノテーション(SensioFrameworkExtraBundle)のドキュメントによると、コントローラーがResponseオブジェクトを返す場合は、@Template
の設定内容が無視されるらしい。
本当かどうか、やってみた。
// BlogController /** * @Route("/", defaults={"page": "1"}, name="blog_index") * @Route("/page/{page}", requirements={"page": "[1-9]\d*"}, name="blog_index_paginated") * @Method("GET") * @Cache(smaxage="10") * @Template("blog/index.html.twig") */ public function indexAction($page) { dump($page); $posts = $this->getDoctrine()->getRepository(Post::class)->findLatest($page); return $this->render('blog/test.html.twig', ['posts' => $posts]); // return ['posts' => $posts]; }
レスポンスにするテストページは以下のようにした。
{% extends 'base.html.twig' %} {% block body_id 'blog_index' %} {% block main %} <h1>This is test page</h1> {% endblock %} {% block sidebar %} {{ parent() }} {{ show_source_code(_self) }} {% endblock %}
実行結果
アノテーションよりResponseオブジェクトが優先されていることが確認できました。