PHPの新しいテンプレートエンジン「Twig」を使った

Smarty3がついに正式版になったときいて公式サイトに行くとなんと日本語ドキュメントもできてますよ!って書いてた。
それで読み始めたものの・・・こんなに機能いらなくね?と思ってしまったのである。
更に行っちゃうとまだphp4っぽさが残ってるところが気になって気になって夜も眠れない。

php テンプレートエンジンでぐぐった結果、Twigというものがヒット

名前もシンプルでこれはいいんじゃないか!?これを触ってみよう!
xampp起動俺のターン!LinuxではなくWindowsで絶賛開発中だが気にしない!
ピーエッチピー!リクワイワンス!ツウィッグオートローダーレジスタァ!

<?php
require_once '/Twig/AutoLoader.php';
Twig_Autoloader::register();

つまり・このTwigはPHPの新しめの機能spl_AutoLoadを使っている・・
これはオブジェクト信仰の自分にはよさそうですな。もう一つずつrequire_onceするのは許せませんな、うん。
時代は自動ロードですよねーー(でもphp以外で自動ロードみたことなかった・・悔しい)

Twigは機能が最小限におさえられてる!

うん、こういうのでいいんだよこういうので。
とりあえずテンプレートファイルを読み込んで表示するなら以下のクラスだけ押さえておけばいい!

  • Twig_Loader_FileSystem(テンプレートが置いてあるフォルダパス)

ファイルからテンプレートを読み込む。ファイル以外のどこから読むんだよ!?って思ったんだけど・・
テスト用に文字列をそのままテンプレートとして解釈できるTwig_Loader_Stringというのがあるみたいだ。
駄菓子菓子、普通にファイルとして分離したほうが見やすいし書きやすいと思うな。FileSystem以外使おうと思わない。

environment・・環境。環境設定か。これで揃ったのはテンプレートを読み込むローダーと環境設定?
本体はどこへ?いいえこれが本体です。ややこしい名前しやがって・・・もちろん環境設定もこの中に含まれるんだけど。
この本体に「キャッシュフォルダはここだ」とかそういうのを教えればOKのようだ。

呼び出し側(index.php)

フォルダ構造は以下のとおり。とにかく使ってみたかったので全部おいちゃえモード。

<?php
require_once '/Twig/AutoLoader.php';
Twig_Autoloader::register();

$loader = new Twig_Loader_Filesystem(__DIR__);
$twig = new Twig_Environment($loader, array('cache' => __DIR__, 'debug' => false));

$template = $twig->loadTemplate('index.html');
$context = array();
$context['test'] = 'サザエのギャルゲーでございま〜す!';
$template->display($context);

見ればだいたい意味は分かる感じだね。
cacheというのはキャッシュを保存するフォルダ。Twigの構文解析をキャッシュするのであって、
Smartyのような完全ファイルキャッシュとは違う
みたいだ。
debugというのはデバッグであるかどうか?というオプション。頻繁にテンプレートをいじるときは必ずtrueに!
じゃないと、テンプレートを更新しても無視してキャッシュを取りに行っちゃう。

そしてテンプレートもオブジェクト!Twig本体にindex.htmlを読み込ませる。
(この時点でキャッシュは作られる)

contextというのは、テンプレートに割り当てる変数。Smartyだとassignでやってたやつか。
最後にテンプレートをdisplay(表示する)!だけ!

テンプレート(index.html)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    {{ test }}
  </body>
</html>

はい。テキトーです。これで十分だ・・

これでひとまずサザエのギャルゲーでございま〜す!と表示された。
まだ基本的なループや条件分岐やらフィルタ書きたいんだけど・・もう眠いので1回目はこれでおしまい。