アクションメソッドで自動レンダリングを無効にする
2007-08-21


単発TIPS。つか備忘メモですな。

Zend_Controller_*でのMVCを使っていて、あるアクションコントローラのアクションメソッドのみViewRendererヘルパーの自動レンダリングを使用しない場合は、ViewRenderer->setNoRender() を使う。

以下、適当な例。downloadActionはブラウザにCSVファイルをダウンロードさせるって感じ。

class HogeController extends Zend_Controller_Action {
        public function indexAction() {
                // ほっとくと勝手にViewRendererが関連付けられた
                // ビュースクリプトでレンダリングする
        }
        
        public function downloadAction() {
                // 自動レンダリングを無効にする
                $this->_helper->viewRenderer->setNoRender();
                
                // レスポンスヘッダをセット
                // ほんとは$this->getResponse()->setHeader()を使うんだろうけど
                // コード未検証なのでheader()を使ってみる。
                header( 'Content-Disposition: inline;filename=hoge.csv' );
                // 別にapplication/octet-streamじゃなくてもいいか。
                header( 'Content-Type: application/octet-stream' );
                
                // あとはecho なんかでCSVデータを直接出力
        }
}

いや、わざわざ記事にしなくてもいいんだけど、マニュアルのどこに書いてあったかすぐ忘れちゃうもんで...

[PHP]
[Zend Framework]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット