Twigのif文とfor文を完全ガイド!初心者でもわかる条件分岐とループ処理
生徒
「Twigのテンプレートで、条件によって表示を変えたり、繰り返し表示したりできますか?」
先生
「はい、Twigにはif文やfor文があって、条件分岐やループ処理が簡単に書けますよ。」
生徒
「それってプログラムみたいですね。初心者でも使えますか?」
先生
「もちろんです。Twigは初心者でも使いやすいテンプレート言語なので、やさしく解説していきますね!」
1. Twigで条件分岐をする方法(if文)
まずはTwigで「条件によって表示を変える」方法を学びましょう。Twigではif文を使って、ある条件が「真(true)」なら指定した内容を表示できます。
たとえば、ログインしているかどうかで表示を切り替える場合などに使われます。
{% if user %}
<p>ようこそ、{{ user.name }}さん!</p>
{% else %}
<p>ログインしてください。</p>
{% endif %}
{% if 条件 %}で始まり、{% else %}で分岐し、{% endif %}で終了します。これはTwig特有の書き方で、PHPのif文とは少し異なりますが、覚えるととても簡単です。
2. Twigで繰り返し処理をする方法(for文)
次に、Twigのfor文を使って、リストや配列の中身を順番に表示する方法を紹介します。これは「ループ処理」と呼ばれるものです。
たとえば、商品一覧やメッセージの一覧を画面に表示するときに便利です。
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
この例では、itemsという配列の中身を1つずつ取り出して、itemとして表示しています。
3. Twigの条件文で使える演算子
Twigでは、if文の中で次のような演算子(条件を比べる記号)を使うことができます。
==(等しい)!=(等しくない)>(より大きい)<(より小さい)in(含まれている)
たとえば、ある商品が在庫切れかどうかをチェックしたい場合は、次のように書きます。
{% if stock == 0 %}
<p>在庫切れです</p>
{% endif %}
4. Twigのループ内で使える便利な変数
forループの中では、loopという特別な変数が自動で使えるようになります。これを使うと、ループの回数や最初・最後の判定などができます。
<ul>
{% for user in users %}
<li>
{{ loop.index }}番目のユーザー:{{ user.name }}
{% if loop.first %}(最初の人){% endif %}
{% if loop.last %}(最後の人){% endif %}
</li>
{% endfor %}
</ul>
このように、loop.indexは現在のループの番号(1から始まる)を表し、loop.firstやloop.lastで最初や最後の要素かどうかを判定できます。
5. Twigの空データへの対応(ループのelse)
ループ処理をするとき、データが空の場合に何も表示されないと困りますよね。Twigではforループのあとにelseを使うことで、データが空だった場合の処理も書けます。
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% else %}
<li>データがありません</li>
{% endfor %}
</ul>
このように、itemsが空ならelseの中が実行されます。とても便利ですね。
6. Twigで条件とループを組み合わせる
実際の画面では、「ループの中で特定の条件が一致したら何かを表示する」といった複雑な処理もよくあります。Twigではifとforを組み合わせることも簡単です。
<ul>
{% for product in products %}
{% if product.stock > 0 %}
<li>{{ product.name }}:在庫あり</li>
{% else %}
<li>{{ product.name }}:在庫なし</li>
{% endif %}
{% endfor %}
</ul>
このように、商品ごとに在庫があるかどうかをチェックして、表示内容を変えることができます。
7. 実行結果のイメージ
例えば、次のような配列items = ['りんご', 'バナナ', 'みかん']をTwigでループしたときの出力結果は次のようになります。
<ul>
<li>りんご</li>
<li>バナナ</li>
<li>みかん</li>
</ul>
Twigでは、HTMLと組み合わせて自由にレイアウトを作れるので、テンプレートエンジンとして非常に使いやすいのです。