PHPのテンプレートエンジンの中で最も有名なSmartyの開発陣が作ったというTwigを使ってみました。
Twigを知った切っ掛けは、以前参加したモダンPHP勉強会 #2。
ここで発表された内容とほぼ同じことが、以下のサイトに書かれているので参考にしました。
まずはインストール。
$ pear channel-discover pear.twig-project.org
$ pear install twig/Twig-beta
$ pear install twig/Twig-beta
まだBeta版ですね。
次にプログラム中にTwigを使うためのスクリプトを書きます。
require_once '/usr/share/pear/Twig/Autoloader.php';
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('./template/');
$escaper = new Twig_Extension_Escaper(true); // ※1
$options = array('cache' => './cache/', 'debug' => true);
$twig = new Twig_Environment($loader, $options);
$twig->addExtension($escaper); // ※2
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('./template/');
$escaper = new Twig_Extension_Escaper(true); // ※1
$options = array('cache' => './cache/', 'debug' => true);
$twig = new Twig_Environment($loader, $options);
$twig->addExtension($escaper); // ※2
./template と ./cache のふたつのディレクトリを指定していますが、./template はテンプレートファイルを入れるディレクトリ、./cache はTwigのシステムが使うキャッシュディレクトリです。
どちらも名前は任意ですが、cache の方はパーミッションを777にしておきましょう。
※印を付けた2行は、Escaperというエクステンションを使うように指定している部分で、これを使うと、テンプレートに渡された変数を表示する際に、デフォルトでHTMLエスケープされるようになります。
参考にしたコードで使われていないように、使わなくてもいいのですが、なるべく使った方がいいでしょう。
次にプログラム中にテンプレートを呼び出す部分を書きます。
$template = $this->twig->loadTemplate('sample.tpl');
$contents = array('title' => 'Twig Sample', 'word' => 'Hallo World!', 'html' => '<b>強調</b>');
echo $template->render($contents);
$contents = array('title' => 'Twig Sample', 'word' => 'Hallo World!', 'html' => '<b>強調</b>');
echo $template->render($contents);
sample.tpl はテンプレートファイルの名前です。ってわかりますね。
$contents にテンプレートに渡す変数をセットして render に渡しています。
テンプレートの中身はこんな感じかな。
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<p>{{ word }}</p>
<p>{{ html|raw }}</p>
</body>
</html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<p>{{ word }}</p>
<p>{{ html|raw }}</p>
</body>
</html>
HTMLをエスケープせずに出力するときは、修飾子 raw を付けます。
逆にEscaperを使っていなくてエスケープしたいときは、修飾子 e を付けるそうです。
ざっとこんな感じでした。