ありがとう。また会おう。

まぁゆるりとやっていきますよと。

Filterでlayoutファイルを変更する

symfonyで携帯サイトを作っているのですが、キャリアごと&上位機種・下位機種でレイアウトファイルを変えられた方がいいなぁ・・・ってことで、いろいろ試してみました。


まず簡単に思いつくのがlayout.phpの中でif文べた書き(笑)
・・・なんか美しくない。。。


それから、Actions.class.phpのpreExecute()メソッドで、setLayout()メソッドを指定。
・・・悪くはないけど、これだと全部のモジュールに書かないといけないのがちょっと嫌。。。


てことで、次なる策。
カスタムFilter。


・・・で、やってみたんですが、かなり悪戦苦闘。
setLayout()メソッドは、sfActionクラスにあるわけですが、Filterクラスからここにたどり着く方法がわからず、悩みました。
結局こんな荒技で対処。

<?php
//sfFilterの派生クラス、execute()メソッドの一部抜粋
$this->getContext()->getController()->getAction($this->getContext()->getModuleName(), $this->getContext()->getActionName())->setLayout('hoge_layout');

?>

sfControllerクラスが、getAction()メソッドを持っているので、これを利用して、さらにこのメソッドは引数にモジュール名とアクション名を要求するので、sfContextクラスのgetMethodName()、getActionName()メソッドを使うと。


動くには動いたんですが、この方法でsymfony的には正しいんでしょうか・・・激しく不安です。。。