Symfony Advent Calendar 2022の7日目の記事です!
Symfonyでは、twigがデフォルトのテンプレートエンジンとして採用されています! 今回はtwigの基礎構文とデフォルトの便利なタグ・フィルター・関数を紹介したいと思います📝
基本構文
下記の構文を使って、Twig で変数や条件式・ループを記述します。
{{ }}
: 変数や式の結果を表示する。
{% %}
: 条件やループの使用時に使う。
変数
Symfonyを使ってControllerからtwigへ渡された変数(オブジェクト)のプロパティを表示させるには、下記の方法で記述します。
{{ 変数名.プロパティ名 }}
: 変数名とプロパティを . (ピリオド)でつなぐ。
タグ
ifタグ
{# ifタグ #}
{% if domesticCars %}
<a>国産車はあります。</a>
{% endif %}
forタグ
Twigのforタグは、PHPのfor文
とforeach文
の役割を持たせることが出来ます。
for文としてのforタグ
{% for i in 1..10 %}
<li>{{ i }}</li>
{% endfor %}
foreach文としてのforタグ
Twigのforeach文は、forタグを使って代用します。
{% for domesticCar in domesticCars %}
<li>{{ domesticCar }}</li>
{% endfor %}
{% for key, value in 変数名 %} {% endfor %}
とすることで、配列を扱うことも可能です。
※for文も同様に配列を扱えます。
{% for manufacturer, model in domesticCars %}
<li>{{ manufacturer }}:{{ model }}</li>
{% endfor %}
verbatimタグ
verbatimタグで囲まれているコードは生のテキストで表示されます。
{% verbatim %}
<ul>
{% for item in seq %}
<li>{{ item }}</li>
{% endfor %}
</ul>
{% endverbatim %}
フィルター
dateフィルター
第一引数に特定のフォーマット、
第二引数にタイムゾーンを設定指定することも可能です。
{# 出力結果:December 7, 2022 09:00 #}
{{ 'now'|date('m/d/Y', "Asia/Tokyo") }}
trimフィルター
デフォルトで文字列の前後の空白を取り除きます。
{# 出力結果:'前後の空白を取り除くフィルターです' #}
{{ ' 前後の空白を取り除くフィルターです '|trim }}
roundフィルター
第一引数に小数点第何位かを、
第二引数に切り下げか切り上げかを指定可能
{# 出力結果:3 小数点以下を切り下げる #}
{{ 3.14159265359|round(0, 'floor') }}
{# 出力結果:4 小数点以下を切り上げる #}
{{ 3.14159265359|round(0, 'ceil') }}
number_formatフィルター
第一引数に小数点第何位か(0からカウント)を指定し四捨五入、
第二引数に小数点で区切る際の文字を、
第三引数に桁を区切る際の文字を指定可能。
{# 出力結果:9876.54 #}
{{ 9876.54321|number_format(2, '.', ',') }}
replaceフィルター
文字列の置換が可能です。
{{ "たなか たろう"|replace({ 'たなか': "田中", 'たろう': '太郎' }) }}
改行
{# 出力結果:
名前<br>
苗字
#}
{{ '名前\n苗字'|nl2br }}
lengthフィルター
文字列の長さを返します。
{# 出力結果:6 #}
{{ 'string'|length }}
関数
min関数/max関数
min():最小値を返す。
max():最大値を返す。
{# 出力結果:1 #}
{{ min([5, 2, 3, 1, 4]) }}
{# 出力結果:5 #}
{{ max([5, 2, 3, 1, 4]) }}
{# 出力結果:12 #}
{{ min({0: 54, 1: 12, 2: 65, 3: 76}) }}
※配列に対して関数を使うと、valueの値で比較をします。
range関数
引数の数字の範囲の数字を配列で返します。
{# 出力結果:012345678910 #}
{% for i in range(0, 10) %}
{{ i }}
{% endfor %}
date関数
引数にPHPでサポートされている形式を入力することで日付を取得します。
引数がない場合は、現在の日付を返します。
{% if date(user.register_at) < date() %}
{# ユーザーの登録日が今日より前であれば、ここの書いた処理が実行される。 #}
{% endif %}
Twigのデフォルトのタグ・フィルター・関数を紹介しましたが、独自のタグ・フィルター・関数を自作することも可能なようです!
今回記載したものは一部で他にもTwigのデフォルトのタグ・フィルター・関数があったので、下記に参考ページとしてドキュメントを記載しました。
覗いてみてください👀
参考ページ
https://twig.symfony.com/doc/3.x/tags/index.html
https://twig.symfony.com/doc/3.x/filters/index.html
https://twig.symfony.com/doc/3.x/functions/index.html