インストール
composerでインストール
mkdir twig_sample cd twig_sample/ curl -s http://getcomposer.org/installer | php cat << _EOT_ > composer.json { "require": { "twig/twig": "1.*" } } _EOT_ php composer.phar install
シンプルな使い方
templates/sample.twig
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> {{ hoge }} </body> </html>
※テンプレートを用意
test1.php
<?php /** */ require_once __DIR__ . "/vendor/autoload.php"; // 初期化 Twig_Autoloader::register(); // 設定 $loader = new Twig_Loader_Filesystem(__DIR__ . '/templates'); $twig = new Twig_Environment($loader); // テンプレートを使用 $template = $twig->loadTemplate("sample.twig"); // レンダリング echo $template->render([ "hoge" => "Hello World." ]);
↓
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> Hello World. </body> </html>
こうなる
指定方法ざっくり
通常のスカラー変数
<?php require_once __DIR__ . "/vendor/autoload.php"; Twig_Autoloader::register(); $loader = new Twig_Loader_Filesystem(__DIR__ . '/templates'); $twig = new Twig_Environment($loader); $template = $twig->loadTemplate("sample.twig"); // 値を設定 $aaa = "111"; echo $template->render([ "hoge" => $aaa ]);
の場合はrenderで指定したキー名をそのまま指定するだけ
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> {{ hoge }} </body> </html>
配列の場合
<?php require_once __DIR__ . "/vendor/autoload.php"; Twig_Autoloader::register(); $loader = new Twig_Loader_Filesystem(__DIR__ . '/templates'); $twig = new Twig_Environment($loader); $template = $twig->loadTemplate("sample.twig"); // 値を設定 $aaa = ["111" => "aaa"]; echo $template->render([ "hoge" => $aaa ]);
配列の場合はsmartyの場合と同様"."を連結する方法と、キーを指定する方法の2つが利用できる
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> {{ hoge['111'] }} {{ hoge.111 }} </body> </html>
オブジェクト
<?php require_once __DIR__ . "/vendor/autoload.php"; Twig_Autoloader::register(); $loader = new Twig_Loader_Filesystem(__DIR__ . '/templates'); $twig = new Twig_Environment($loader); $template = $twig->loadTemplate("sample.twig"); // 値を設定 $aaa = new stdClass(); $aaa->hoge = 100; $aaa->foo = 200; echo $template->render([ "hoge" => $aaa ]);
オブジェクトの場合も"."でアクセスできる
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> {{ hoge.hoge }} {{ hoge.foo }} </body> </html>
if、foreach
<?php require_once __DIR__ . "/vendor/autoload.php"; Twig_Autoloader::register(); $loader = new Twig_Loader_Filesystem(__DIR__ . '/templates'); $twig = new Twig_Environment($loader); $template = $twig->loadTemplate("sample.twig"); // 値を設定 $aaa = [ 0 => 100, 1 => 200, 2 => 300, ]; echo $template->render([ "hoge" => $aaa ]);
if文やforeachなどは%を指定して制御
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> {% if hoge|length > 0 %} <ul> {% for item in hoge %} <li>{{ item }}</li> {% endfor %} </ul> {% endif %} </body> </html>
内部で変数を動的に作成
set文を使用することで可能
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> {% set aaa = 100 %} <div> {{ aaa }} </div> {% set list = [ 100, 200, 300 ] %} <ul> {% for item in list %} <li>{{ item }}</li> {% endfor %} </ul> </body> </html>
文字列の連結
php側でレンダリングした変数とhtmlの値を連結することも可能
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> {% set aaa = "aaa"~hoge %} </body> </html>
別のテンプレートをインクルード
sample.twig
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> {% include "sample2.twig" %} </body> </html>
sample2.twig
<h1>Hello World</h1> {{ hoge }}
↓
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> <h1>Hello World</h1> hoge</body> </html>
おまけ
エスケープ確認
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> {% set foo = "<h1>hello world.</h1>" %} {{ foo }} </body> </html>
↓
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> <h1>hello world.</h1> </body> </html>
htmlエスケープを無効にしたい場合
<!DOCType html> <html> <head> <meta charset="utf8" /> </head> <body> {% set foo = "<h1>hello world.</h1>" %} {{ foo|raw }} </body> </html>
※フィルタにrawを使用する
今回はここまで…