symfony 1.4で、PCサイトの携帯版を作ることになりました。
アクションは共通にして、テンプレートのファイル名を、携帯とPCで切り分けるようにしたいと思います。
例:
templates/indexSuccess.php (PC用)
templates/indexSuccess.mobile.php (携帯用)
で、これはフォーマットを指定することで実現できます。フォーマットに関してはJobeetを参照。
Practical symfony | 15日目: Web サービス | symfony | Web PHP Framework
まずは携帯キャリアのIPから高速にキャリア判定をしてくれるプラグインを準備しておきます。
sfMobileIPPluginをsymfony 1.4で使ってみた
次にフィルタを用意します。
app/frontend/lib/filter/myMobileLayoutFilter.class.php
<?php class myMobileLayoutFilter extends sfFilter { public function execute($filterChain) { if ($this->isFirstCall()) { if (sfMobileIP::carrier() != 'pc') { $request = $this->getContext()->getRequest(); $request->setRequestFormat('mobile'); } } $filterChain->execute(); } }
最後にfilters.ymlを編集すればOKです。
app/frontend/config/filters.yml
rendering: ~ security: ~ myMobileLayoutFilter: class: myMobileLayoutFilter cache: ~ execution: ~
layoutのテンプレートも携帯版を用意しておきます。
例:
app/frontend/templates/layout.php (PC用)
app/frontend/templates/layout.mobile.php (携帯用)
注意点として、partialなども全部「.mobile.php」の形式のファイルがないと動作しません。どこかでファイルを作り忘れるとsfRenderExceptionが投げられるので注意してください。ちなみに、dev環境だとそのまま真っ白な画面になってしまって、原因追求がしにくいようです。
その場合は、ログファイルにてチェックしましょう。
log/frontend_dev.log
symfony [err] {sfRenderException} The template "indexSuccess.mobile.php" does not exist or is unreadable in "".