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