Enjoy, Twig
PHP BLT #2
2016.01.13
林 正紀 @m_norii
About me
• 林 正紀 (HAYASHI Masanori)
• 1974年09月12日生 (41歳)
• 埼玉生まれ埼玉育ち埼玉ふじみ野在住
• 埼玉大学/大学院・数学専攻
• 埼玉土着エンジニア
• EMTG
• @m_norii
• http://norii.hatenablog.com/
• https://www.facebook.com/m.norii
http://emtg.co.jp/archives/2975
http://emtg.co.jp/archives/2975
エンジニア募集中!!
http://emtg.co.jp/recruit
Enjoy, Twig
• Includeのignore missing
• 条件付きForループ
• slice
• Verbatim
• template_from_string
Includeのignore missing
• 指定テンプレートが無い場合、何もしない
(この指定が無い場合はエラーになる)
//foo.html.twig が無い場合はエラー
{% include 'foo.html.twig' %}
//foo.html.twig が無い場合は何も出力しない
{% include 'foo.html.twig' ignore missing %}
//複数ファイル指定
//foo.html.twig が無い場合 bar.html.twigを表示、それもなければエラー
{% include ['foo.html.twig', 'bar.html.twig'] %}
//foo.html.twig が無い場合 bar.html.twigを表示
//それもなければ何も出力しない
{% include ['foo.html.twig', 'bar.html.twig'] ignore missing %}
条件付きForループ
• リスト中の特定条件のものだけ処理をする場合
に便利
• For とif をネストして書くよりもすっきり書
ける
<ul>
{% for user in users if user.active %}
<li>{{user.username}}</li>
{% endfor %}
</ul>
Slice
• 配列に対してはarray_slice()
文字列に対しては mb_substr()/substr()と
して作用する
{% for i in [1, 2, 3, 4, 5]|slice(1, 2) %}
※i = 2、3に対してのみ処理が行われる
{% endfor %}
{{ 'Hello'|slice(1, 2) }}
{# 出力は「el」 #}
Verbatim
• Twigで評価される {{ }}、{% %}などを
評価せずそのまま表示する
• 「Twigでこう書いてね」を伝えるのに便利
{% verbatim %}
以下のように記述してください。
<pre>
{% if date() >= date('2016-01-08 00:00:00') %}
【表示したい内容】
{% endif %}
</pre>
{% endverbatim %}
template_from_string
• 引数を再度Twig構文として評価する
• いわゆるeval的なもの
動機
CMSの中で
Twigを記述したい
※画像はあくまでイメージです。内容はWordpressとは関係ありません
template_from_string
template_from_string
• デフォルトでは有効ではないので、設定が必要
(前スライド後半参照)
• DBにTwigテンプレ文字列を登録して渡す、み
たいなことができる
• 用法用量を守って正しく使いましょう
• Template_from_string()に渡す文字列に
template_from_string()が入っていたら・・・
どうなるのか?(試してない)
• ユーザ入力に対して使っちゃダメ、絶対!
Enjoy, Twig!!

Php blt-vol2