ZendFrameworkのエレガントなSmarty対応

かなり前に、ZendFrameworkでSmartyを透過的になんちゃらなんて日記を書いてたと思うけど、
その続編。 そのモジュールを公開する。


Zend-Smartyモジュール


Zend Flameworkでデフォルトビュー以外をレンダリングしたい場合、
どうしても、各コントローラでzend_Viewをnewする必要があり、
そこをSmartyに置き換えようものなら、Viewクラスのnewは必須なわけです。

そんなこんなで、透過的に置き換えようと思ったら、
Zend_Controller_Actionを継承したクラスで、viewファイルのnewと
デフォルトビューの選定を行う必要が出てきます。
どっちかというとそっちが重要なので、
SmartyView自体は、
PHPフレームワーク完全マスター―PHP5.2.3PHP4.4.7対応
を参考にしています。
これだと、assignしか使えないので、__setメソッドも実装してるくらいです。

ソースの書き換えをしないといけない箇所が1つあるので、
そこだけ直してください。
SmartyViewのコンストラクタ。Smartyの設定です。

使い方は簡単。
各コントローラでUseSmarty_ControllerActionを継承する。
Viewパス、デフォルトビューの決定方法はZendViewと同じなので、
Sampeコントローラのindexアクションなら、
views/scripts/sample/index.tpl
がデフォルトビューになる。
コントローラ側での値引き渡しもまったく同じように使えるので、
$this->view->a = "aaa";
とか
$this->view->assign("b", 10);
とかすればOK。
sampleディレクトリ内の別テンプレートをレンダリングしたい場合は、
$this->render("sample"); ←sample.tplレンダリング
とやれば良い。


すでにある程度作ってしまった。。なんて人も、
viewだけ差し替えればSmarty対応できるので、ぜひおすすめしたい。