symfonyで携帯向け開発その1
Tsukimiyaです。やっとログイン出来たので久々に更新です。
ここしばらく、symfonyで携帯向けコンテンツを作っていました。 tipsらしいものもいくつかあるのでいくつか紹介したいと思います。 今回はauで問題になるキャッシュコントロールのお話。
au向けのコンテンツを作っていると大抵の場合キャッシュコントロールが問題になります。 大抵、header()関数でPragma: no-cacheを吐くとかしてキャッシュコントロールを無効にすると思うのですが多くの場所にそれを書くのは面倒くさい。 そこでsymfony的にfilterを使って解決します。 PROJECT_DIR/lib/ あたりにmobileFilter.class.phpというファイルを作ります。
<?php class mobileFilter extends sfFilter { public function execute ($filterChain) { if ($this->isFirstCall()) { $context = $this->getContext(); $response = $context->getResponse(); $response->setHttpHeader('Expires', "Thu, 01 Dec 1994 16:00:00 GMT"); $response->setHttpHeader('Last-Modified', gmdate("D, d M Y H:i:s")." GMT"); $response->setHttpHeader('Cache-Control', 'no-cache,must-revalidate'); $response->setHttpHeader('Cache-Control', 'post-check=0,pre-check=0', false); $response->setHttpHeader('Pragma', 'no-cache'); } // execute next filter $filterChain->execute(); } }
あとはfilters.ymlでこのフィルターを登録してsymfony ccすればOK。 mojavi3の時のfilterは、filterの初回起動判定に自分でstaticな変数を作って頑張っていたのがsymfonyではisFirstCall()メソッドが準備されていてスマートに記述することが出来、mojavi3から細かい部分でも進化していることが感じられます。
次回は携帯でのセッションについて書く予定です。

