テンプレートエンジンTwigを使ってみた

PHPのテンプレートエンジンの中で最も有名なSmartyの開発陣が作ったというTwigを使ってみました。

Twigを知った切っ掛けは、以前参加したモダンPHP勉強会 #2
ここで発表された内容とほぼ同じことが、以下のサイトに書かれているので参考にしました。


まずはインストール。

$ pear channel-discover pear.twig-project.org
$ 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

./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);

sample.tpl はテンプレートファイルの名前です。ってわかりますね。
$contents にテンプレートに渡す変数をセットして render に渡しています。

テンプレートの中身はこんな感じかな。

<!DOCTYPE html>
<html>
<head>
  <title>{{ title }}</title>
</head>
<body>
  <p>{{ word }}</p>
  <p>{{ html|raw }}</p>
</body>
</html>

HTMLをエスケープせずに出力するときは、修飾子 raw を付けます。
逆にEscaperを使っていなくてエスケープしたいときは、修飾子 e を付けるそうです。

ざっとこんな感じでした。

コメントを残す