Twigの制御構文
Twigの基本の記述方法が理解できたところで、制御構文の記述方法を紹介しておきましょう。制御構文は「{% … %}」と波括弧と%で囲みます。
条件分岐
まずは条件分岐です。これは例えば、以下のコードになります。
<p>
{% if rand == 1 %}
大吉です!<br>
おめでとうございます!
{% elseif rand == 2 %}
中吉です!
{% else %}
凶です!
{% endif %}
</p>
このサンプルでは、render()メソッドの第3引数として渡す連想配列は以下のものを想定しています。
$assign["rand"] = rand(1, 3);
これを見てもわかるように、テンプレート変数はifやelseifの条件内でもそのまま使えます。
また、条件部分に以下のようにテンプレート変数をそのまま記述した場合、それはempty()による判定を意味します。
{% if members %}
この条件分岐を使う際、注意したいのは「かつ」、「または」、否定です。通常のPHPでは、「&&」、「||」、「!」を使いますが、Twigでは「and」、「or」、「not」と記述します。例えば、上のmembersがempty()でない場合を表すには、以下の記述となります。
{% if not members %}
ループ
次にループです。通常のカウンタ変数を利用したループは、以下のようなコードになります。
<ol>
{% for i in 1..5 %}
<li>{{i}}個目</li>
{% endfor %}
</ol>
forの直後にカウンタ変数名を記述し、続くinの次に「..」(ドット2個)を挟んで範囲を指定します。
では、(連想)配列を使ったループはどのようになるでしょうか。render()メソッドの第3引数として以下のデータを指定したとします。
$assign["resultList"] = ["A"=>"田中", "B"=>"中野", "C"=>"野村"];
これをループさせながら表示する場合、以下のようなコードになります。
<ul>
{% for key, value in resultList %}
<li>{{key}}は{{value}}です</li>
{% endfor %}
</ul>
forの次にはキーを格納する変数名、値を格納する変数名をそれぞれカンマで区切って記述し、続くinの次に連想配列を表すテンプレート変数名を記述します。もし、元データが連想配列ではなく通常の配列の場合は、以下のようにキー部分を省略します。
{% for element in numList %}
まとめ
今回は、Slimにおけるビューの扱いをテーマとして、SlimとテンプレートエンジンTwigの連携方法を紹介しました。
次回は、途中のNoteで軽く紹介したように、Slimのコンテナを扱います。Slimのコンテナは、アプリ中で利用するクラスのインスタンス生成をまとめて引き受ける機能です。コンテナを利用することでDI(Dependency Injection:依存性注入)が実現できます。その辺りを解説していきます。
