助けてもらってばかりで足を向けて寝れない、日本symfonyユーザー会クイックツアー コントローラーにそれっぽい記述があるので試してみました。
# src/Acme/PagesBundle/Controller/PagesController.php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
...
/**
* @Route("/xml", defaults={"_format"="xml"}, name="_xml")
* @Template()
*/
public function xmlAction()
{
return $this->render('AcmePagesBundle:Pages:xml.xml.twig');
}
# src/Acme/PagesBundle/Resources/views/Pages/
pc_home.html.twig
...
<a href="{{ path('_xml') }}">XML test</a>
...
# src/Acme/PagesBundle/Resources/views/Pages/xml.xml.twig
<test>
xml test
</test>
これでOKかなと、ブラウザでアクセスするとエラーが表示される。
An exception has been thrown during the rendering of a template ("Route "_xml" does not exist.") in "AcmePagesBundle:Pages:pc_home.html.twig" at line 15.
「_xml」っていう名前のルートは設定されてないよ。って意味かな?多分。...速く英語勉強しないとダメだなぁ。
そんなこんなで色々と試して結局以下のように書いたら動いた。
# src/Acme/PagesBundle/Controller/PagesController.php
public function xmlAction()useとアノテーションを消す。
{
return $this->render('AcmePagesBundle:Pages:xml.xml.twig');
}
# src/Acme/PagesBundle/Resources/views/Pages/
pc_home.html.twig
...このルーティングの名前を変更。
<a href="{{ path('AcmePagesBundle_xml') }}">XML test</a>
...
# src/Acme/PagesBundle/Resources/views/Pages/xml.xml.twig
<test>このファイルは変更なし。
xml test
</test>
# src/Acme/PagesBundle/Resources/config/routing.yml
...通常のルーティングの設定に「_format: xml」を追加。
AcmePagesBundle_xml:
pattern: /xml
defaults: { _controller: AcmePagesBundle:Pages:xml, _format: xml }
これで何とかxmlで表示されるように動いた。
FirefoxのFirebugでコンテンツタイプを見てみても
Content-Type text/xml; charset=UTF-8って出てる。ヨシヨシ。
...ただ、アノテーション使う方式は何がダメだったのかなぁ。謎は残ったままです。
0 件のコメント:
コメントを投稿