symfony-1.4でSmartyを使う

最近下火になっているような気がするSmarty
私自身はあまりアプリを開発しないため,実際の所どうなのかがわからないのだけど,
PHPの場合そのままテンプレートとして使える言語だし,
フレームワークのヘルパと相性が良くないこともあって下火なのではないかと思う。


それでも,過去の資産を流用してSmartyを使いたいというニーズはあるようで
sfViewの勉強も兼ねてプラグインを作ってみることにした。
そもそもテンプレートエンジンの切り替えを実現できるようレイヤ分けがされている模様。


とりあえず動作しそうな状態にはなったものの,
Smartyのことを詳しく知らないので実用に耐えられるものなのかどうか。
symfony-1.4.4 + Smarty-2.6.26 で確認。
http://devel.studiopopy.com/psfSmartyPlugin-0.0.1.zip


使い方
1. Smartyを lib/vendor/smarty に用意する
2. アーカイブを plugins に展開
3. pluginを有効にするためにconfig/ProjectConfiguration.class.php のsetup()内に下記を追記

$this->enablePlugins('psfSmartyPlugin');

4. ビューにsmartyを使うよう, apps/*/config/module.yml を編集

all:
  view_class: psfSmarty

5. テンプレートを作る*.tpl
6. Smarty版のレイアウトを作る (apps/*/templates/layout.tpl)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    {{php}} include_http_metas() {{/php}}
    {{php}} include_metas() {{/php}}
    {{php}} include_title() {{/php}}
    <link rel="shortcut icon" href="/favicon.ico" />
    {{php}} include_stylesheets() {{/php}}
    {{php}} include_javascripts() {{/php}}
  </head>
  <body>
    {{$sf_content}}
  </body>
</html>

7. アクセス


デフォルトでは以下の設定でSmartyインスタンスを作成する。

・template_dir: apps/*/modules/*/templates
・compile_dir: cache/${appname}/${env}/templates_c
・plugins_dir: plugins, apps/*/modules/*/lib/smarty, apps/*/lib/smarty, lib/smarty
・left_delimiter: {{
・right_delimiter: }}

Smartyにはあまり詳しくないのだけど,継承して独自の設定を行ったり,
独自のメソッドを追加したりして使う風習があるみたい。

各種パスやデリミタはymlで設定できるようにしようか迷ったけども,
Smartyファクトリの差し替えができるようにしてみた。


過去の資産の流用という面を考えると,
独自に継承したSmartyインスタンスが使えた方がいいと思って。
詳細は同梱のREADMEを参照。


Smarty-3.0が出るそうだし,
試しながらもう少し作りこんでいこうかな。どうしようかな。


個人的にはPHPテンプレートが好みだったりして。