Twigの基本
symfony2でtwigを使うことになったので、基本の見直しをしました。
twigの基本的な使い方
if 文
1 2 3 4 5 6 7 | {% if number == 0 %} hoge<br> {% elseif nickName == 'hoge' %} huga<br> {% else %} mugo<br> {% endif %} |
foreach 文
・配列
1 2 3 | {% for value in sample_array%} <li>{{value}}</li> {% endfor %} |
・連想配列
1 2 3 | {% for key, value in sample_array %} <li>{{key}}:{{value}}</li> {% endfor %} |
for 文
1 2 3 | {% for i in 0..10 %} * {{ i }} {% endfor %} |
Twig内で変数を定義
1 2 | {% set int = 1234 %} 変数名 → {{ int }} |
ループ処理にif 文を一体化
1 2 3 4 5 | {% for user in users if user.active %} <li>{{ user.username }}</li> {% else %} <li>ユーザーが見つかりません</li> {% endfor %} |
・この書き方はTwig独自の機能で、if文がなければ全ユーザーを取得しますが、if文でアクティブなユーザーという条件を書いているためアクティブなユーザーのみを取得します。
継承
ベースとなるテンプレートを継承して必要な部分のみ上書きできます。
まずベースとなるテンプレートを作成します。
・base.html.twig (継承元)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!DOCTYPE html> <html> <head> <title>{% block title %}{% endblock %} - My Webpage</title> </head> <body> <div id="content"> {% block content %} コンテンツ {% endblock %} </div> <div id="footer"> {% block footer %} フッター {% endblock footer %} </div> </body> </html> |
{% block %}{% endblock %}で指定されて部分を必要に応じて、継承先テンプレートで上書きすることができます。
・index.html.twig (継承先)
1 2 3 4 5 6 7 8 9 10 11 | // ベースとなるテンプレートを継承 {% extends "base.html.twig" %} {% block title %}私のページ{% endblock %} {% block content %} <h1>Index</h1> <p class="important"> Welcome on my homepage. </p> {% endblock %} // 継承先でfooterについて記述しなければbase.html.twigの記述が出力される |
上書きしなければbase.html.twigの内容が反映されます。
出力されるHTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <html> <head> <title>私のページ - My Webpage</title> </head> <body> <div id="content"> <h1>Index</h1> <p class="important"> Welcome on my homepage. </p> </div> <div id="footer"> フッター </div> </body> </html> |
基本は以上になります。
今までテンプレートはSmartyを使ってみましたが、書き方もそんなに変わらないですし、Twigにしかない機能もあったりと使いこなせれば幅が広がると思います。
速度もSmartyよりは早いとのことなので使っていきたいと思います。
Author Profile
スターフィールド編集部
SHARE