Download pptx - Php blt-vol2

Transcript
Page 1: Php blt-vol2

Enjoy, TwigPHP BLT #22016.01.13

林 正紀 @m_norii

Page 2: Php blt-vol2

About me• 林 正紀 (HAYASHI Masanori)• 1974 年 09 月 12 日生 (41 歳 )• 埼玉生まれ埼玉育ち埼玉ふじみ野在住• 埼玉大学/大学院・数学専攻• 埼玉土着エンジニア• EMTG

• @m_norii• http://norii.hatenablog.com/• https://www.facebook.com/m.norii

Page 3: Php blt-vol2

http://emtg.co.jp/archives/2975

Page 4: Php blt-vol2

http://emtg.co.jp/archives/2975

エンジニア募集中 !!

http://emtg.co.jp/recruit

Page 5: Php blt-vol2

Enjoy, Twig• Include の ignore missing• 条件付き For ループ• slice• Verbatim• template_from_string

Page 6: Php blt-vol2

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 %}

Page 7: Php blt-vol2

条件付き For ループ

• リスト中の特定条件のものだけ処理をする場合に便利• For と if をネストして書くよりもすっき

り書ける<ul> {% for user in users if user.active %} <li>{{user.username}}</li> {% endfor %}</ul>

Page 8: Php blt-vol2

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 」 #}

Page 9: Php blt-vol2

Verbatim• Twig で評価される {{ }} 、 {% %} など

を評価せずそのまま表示する• 「 Twig でこう書いてね」を伝えるのに便利

{% verbatim %} 以下のように記述してください。  <pre> {% if date() >= date('2016-01-08 00:00:00') %} 【表示したい内容】 {% endif %} </pre>{% endverbatim %}

Page 10: Php blt-vol2

template_from_string• 引数を再度 Twig 構文として評価する• いわゆる eval 的なもの

Page 11: Php blt-vol2

動機

CMS の中でTwig を記述したい

※ 画像はあくまでイメージです。内容は Wordpress とは関係ありません

Page 12: Php blt-vol2

template_from_string

Page 13: Php blt-vol2

template_from_string• デフォルトでは有効ではないので、設定が必

要 ( 前スライド後半参照 )• DB に Twig テンプレ文字列を登録して渡す、

みたいなことができる• 用法用量を守って正しく使いましょう• Template_from_string() に渡す文字列に template_from_string() が入っていたら・・・どうなるのか?(試してない)• ユーザ入力に対して使っちゃダメ、絶対!

Page 14: Php blt-vol2

Enjoy, Twig!!