2010年8月4日水曜日

SmartyをZend Frameworkの標準のViewに設定する

今回はPHPフレームワークのZend FrameworkとSmartyについての解説です。

Zend FrameworkはPHPの汎用的なWebアプリケーションフレームワークです。
様々な機能が標準で組み込まれていますが、JSPのようなテンプレート機能がありません。

そこで、PHPで比較的普及しているテンプレートライブラリのSmartyを組み込むことにより、
Struts+JSPに近い感覚で開発できるようにしてみます。


まずZend Framework(1.10.6)をダウンロードしプロジェクトを作成します。
(Zend Frameworkの設定については省略します)

同様にSmartyをダウンロードし展開します。ここではVer 2.6.26を使用します。
ディレクトリ構成は以下のようにします。
/zbbs
    /application
        /configs/
        /controllers/
        /views/scripts/index/index.php
        /ViewSmarty.class.php
    /library
        /Zend
        /Smarty
    /public
    /temp/templates_c

application、library、publicディレクトリはzfコマンドが標準で作成します。
temp/templates_cディレクトリはSmartyが使用するので、あらかじめ作成し書き込み権限を与えます。
library/Zendとlibrary/SmartyにはそれぞれZend FrameworkとSmartyを展開して配置します。
(別の場所にinclude_pathが設定してある場合はそれでも問題ありません)
ViewSmarty.class.phpはここからダウンロードしてください。

application/Bootstrap.phpを以下のように修正します。

public function run()
{
    ini_set('mbstring.http_output','UTF-8');
    $this->_initSmarty();
    return parent::run();
}

protected function _initSmarty()
{
    require_once('Smarty/Smarty.class.php');
    require_once(dirname(__FILE__) . '/ViewSmarty.class.php');

    $compile_dir = APPLICATION_PATH . '/../temp/templates_c';

    $view = new ViewSmarty(
         APPLICATION_PATH . '/views/scripts',
         array(
            'compile_dir' => $compile_dir,
            'default_modifiers' => 'escape'
        )
    );

    $request = new Zend_Controller_Request_Http();
    $view->assign($request->getParams());

    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
    $viewRenderer->setView($view)
        ->setViewBasePathSpec($view->getEngine()->template_dir)
        ->setViewScriptPathSpec(':controller/:action.:suffix')
        ->setViewScriptPathNoControllerSpec(':action.:suffix')
        ->setViewSuffix('phtml');
}


設定内容について簡単に説明しますと、最初のrequire_onceでSmartyのクラスと
独自のZendFramework用のViewクラス(ViewSmarty)を読み込みます。
ViewSmartyの内容についてはここでは省略します。)

ViewSmartyの初期化でコンパイル用のテンポラリディレクトリと標準でエスケープを行うdefault_modifiers=escapeを設定します。

$view->assign()でフォームから送信されたパラメータをあらかじめSmartyに設定しておきます。

最後に$viewRenderer->setView()でViewSmartyをZendFrameworkに設定し完了です。


動作確認のため、application/views/scripts/index/index.phtmlを修正し、フォームから送信されたパラメータが表示されるか試します。

index.phtmlは以下のようにします。

<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
</head>
<body>
<form method="post">
<input name="message" value="{$message}" />
<input type="submit" value="OK" />
</form>
</body>
</html>


日本語やダブルクォーテーションを含むテキストを送信しても問題なく表示されれば成功です。

0 件のコメント:

コメントを投稿