感覚的な話で恐縮ですが日本人のSmarty支持率って多いのではないでしょうか?よくお客さんに「Symfony使います」と提案すると「テンプレートエンジンがなくて大丈夫か?」と言われます。その度に「PHP自体元々テンプレートエンジンでして、、、」のような話でお茶を濁しています。Smartyは確かに便利で強力ではありますがsymfonyと役割が重なる部分があり無駄が多いです。しかしながら、
<?php echo $value ?>
と書くよりも
{$value}
と書いた方が楽なのは誰が見ても明らかです。テンプレートエンジンがSmartyしか選べないようなフレームワークは使いたくありませんが、性能面に問題ない使いたい所にだけSmartyを選べれば一番嬉しいですね。そんな要求に応えてくれるプラグインが公開されました。 以前、symfonyのForumで公開されていたSmartyViewライブラリを利用していた方には朗報です。あのSmartyViewがsfSmartyViewPluginとして還ってきました。
インストール
sfSmartyViewPluginのインストール
12/12現在pearインストール、Subersion共にできないようですのでsfSmartyViewPluginからダウンロードしてきたパッケージをmyproject/pluginsディレクトリに展開します。最後のリネームは気分の問題です。
cd myproject/plugins unzip sfSmartyViewPlugin-x.x.x.tgz mv sfSmartyViewPlugin-x.x.x sfSmartyViewPlugin
Smarty本体のインストール
Smartyのサイトからダウンロードして適当な所に展開します。私は、Smarty-2.6.16をダウンロードしてきて、myproject/libに展開しました。この構成だとSmarty.phpはmyproject/lib/Smarty-2.6.16/libs/Smarty.phpに置かれる事になります。
インストールは以上で完了です、難しくありませんね。
アプリケーションの設定
app.ymlに以下の項目が設定可能です。
all:
sfSmartyView:
template_extension: .tpl
class_path: Smarty
cache_dir: Smarty # myprojecct/cache/Smarty
template_security: false既に書いてあるのはデフォルトの値です。私は以下のようにして使っています。
all:
sfSmartyView:
template_extension: .html
class_path: Smarty-2.6.16/libsclass_passにSmarty本体のインストール時にSmarty.phpを配備したパスを指定します。
sfSmartyViewを利用する
sfSmartyViewPluginを早速利用してみます。
実験環境の構築
サンプル用にアプリケーションsmartyモジュールcontentを作成します。
symfony app smarty symfony module smarty content
module.ymlの設定
sfSmartyViewを利用するためにアプリケーション毎もしくはモジュール毎のmodule.yml(なければ作成する)に以下のように記述します。
all: view_class: sfSmarty
12/12現在、sfSmartyViewPluginに同梱されているREADME.pdfは間違っていますのでご注意ください。
テンプレートの置き換え
次に、テンプレートファイルをplugin標準の物に置き換えます。ここではmodule.ymlに書いたように拡張子を.tplから.htmlへ変更をしています。
cp plugins/sfSmartyView/templates/layout.tpl apps/smarty/templates/layout.html cp plugins/sfSmartyView/templates/indexSuccess.tpl apps/smarty/modules/content/templates/indexSuccess.html
デフォルトのアクションを修正
myproject/apps/smarty/modules/content/actions/actions.class.phpのindexアクションを以下のように書きかえます。
public function executeIndex() { //$this->forward('default', 'module'); }
デフォルトでdefault/moduleに飛んでしまうのでそれを止めるだけです。
実行します
http://myserver/contentなどにアクセスします。すると、
やったー動いた!!ん、????なんかウェブデバッグツールが赤くなっています。
まだ、α版のせいでしょうかファイルが足らないみたいです。しょんぼり。
sfSmartyViewPluginは現在、α版ということでまだ試すのは時期尚早だったかもしれません。今日の所はsfSmartyViewPluginはどんなプラグインを目指しているのか判っただけで良しとします。一点気になったのがEscapingOutputの件ですが、これはどうやらオフになってしまうようです。ここの仕様は変えてもらいたいです(手でいちいちescapeしているのが面倒→Flexyつかえってか)。

