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的には正しいんでしょうか・・・激しく不安です。。。