[ZF]output filterを用いた処理を行う

3月 15th, 2010

Zend Framework でviewからブラウザ出力を行う直前に、文字列置換などを行うことが可能な output filter の使い方を以下に記載します。

手法

  1. フィルターファイル(実行ファイル)を用意する

    class名の命名規約として、「名前空間_フィルター名」 という形式を取る。
    またフィルターのファイル名は、フィルター名.php という形式を取る。

    /application/views/filters/Sjis.php
    PHP:
    1. class Revulo_View_Filter_Sjis
    2. {
    3.     public function filter($value)
    4.     {
    5.         header('Content-Type: text/html; charset=Shift_JIS');
    6.         return mb_convert_encoding($value, 'SJIS-win', 'auto');
    7.     }
    8. }

    上記の場合、Revulo_View_Filter という名前空間に Sjis というフィルター名を表す。

  2. 設定ファイルに Zend_View_Filter の設定を追記する

    ZF_TOOL を使ってプロジェクトを生成している場合は、フロントコントローラーに Zend_Application が使われています。この場合、設定INIファイルに View_Filterの設定を追記するだけで動作します。
    Zend_Applicationが使われて無い場合は、Bootstrapへ設定を記述すれば動作させる事が出来ます。

    INIファイルで設定する場合

    resources.view.filterPath の直後、Revulo_View_Filter と書かれた箇所には、フィルター群の名前空間を指定する。
    resources.view.filter は配列形式で複数の登録が可能で、フィルター名を指定する。

    /application/config/application.ini
    CODE:
    1. #filter ファイルを格納するディレクトリのパス
    2. resources.view.filterPath.Revulo_View_Filter = APPLICATION_PATH "/views/filters"
    3. #filter の登録
    4. resources.view.filter[] = "Sjis"

    Bootstrapでする場合
    /application/bootstrap.php
    PHP:
    1. protected function _initViewset()
    2. {
    3.     // ビューを初期化します
    4.     $view = new Zend_View();
    5.    
    6.     $view->addFilterPath( APPLICATION_PATH."/views/filters", 'Revulo_View_Filter');
    7.     $view->addFilter('Sjis');
    8.    
    9.     // ViewRenderer に追加します
    10.     $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
    11.         'ViewRenderer'
    12.     );
    13.     $viewRenderer->setView( $view);
    14.    
    15.     // ブートストラップで保存できるように返します
    16.     return $view;
    17. }

関連リンク

Leave a Reply