がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

Twig チートシート

「あんちょこ」って大分と古くてあんまり使われてない単語なんだなぁ……というあさってな方向からの感想を述べつつ。

単置換

一番の基本だよねぇ。いわゆる「この変数を出力」ってやつ。

{{ variable }}

配列は.(ドット)でつなげる感じ。

{{ array.key }}

フィルタ

いろいろなフィルタがあって、割と便利。

{{ variable|filter }}

filterは、 https://twig.symfony.com/doc/2.x/ とかみるとわかるですが、なんか結構山盛り。
いくつかかいつまんで、使いそうかなぁ、って思えるものを中心にいくつか。

HTMLエスケープ。ただ、単置換でも普通にエスケープしてくれるからなぁ。
「js用のエスケープ」は、もしかしたら、便利、かも。

{{ variable|escape }}
{{ variable|e }}
{{ variable|escape('js') }}
{{ variable|e('js') }}

小文字になぁれ、大文字になぁれ

{{ variable|lower }}
{{ variable|upper }}

「改行をタグに」

{{ variable|nl2br }}

数値のフォーマット変更各種。PHPのnumber_format()関数と一緒

{{ variable|number_format }}

エスケープ無し。気を付けて使わないと危ないけど、とはいえ「必要な時は(稀に)あるよねぇ」というフィルタ。

{{ variable|raw }}

URLエスケープ

{{ variable|url_encode }}

コメント

コメントはこんな風に。

{# コメント #}

ある程度書いておいたほうが、後々、楽だよねぇ。

条件分岐

いわゆる if 文。

{% if variable == 'hoge' %}
    HTML
{% elseif variable == 'bar' %}
    HTML
{% else %}
    HTML
{% endif %}

「厳密な比較( === )」をしたい時に、===と書くとエラーになるので、そゆときは is same as() を使います。

{% if variable is same as('hoge') %}
    HTML
{% else %}
    HTML
{% endif %}

演算子は、andとかorとかを使いましょう。

{% if 18 < variable and variable < 21 %}
    HTML
{% else %}
    HTML
{% endif %}

あと、変数が「あるかないか」とか配列が「あるかないか」とか配列の個数とか、その辺は「length」のフィルタ使ってチェックします。

{% if variable|length  %}

とか

{% if array|length  %}

とか。これは「戻り値が0なら、空文字(空配列)か存在しない変数のどちらかだからfalseになるよねぇ」って感じで使います。

反復

いわゆる「PHPのforeach」は、こんな風に。

{% for key, variable in array %}
  {{ key}}の値は{{ variable }}<br>
{% endfor %}

{% for variable in array %}
  値は{{ variable }}<br>
{% endfor %}

「for文で数値の反復」は、rangeを使います。

{% for i in range(0, 10) %}
  {{ i }}
{% endfor %}

また、ループでは「特別な変数」があって、それを使うと色々なことが出来ます。

loop.index  ループ数 1スタート(1 2 3 4 ...
loop.index0  ループ数 0からスタート(0 1 2 3 ...
loop.first 最初のアイテムならtrue
loop.last  最後のアイテムならtrue

変数の設定

あんまり使わん気もするが……どうしても「テンプレート内で変数を定義したい」場合は、こんな風に。

{% set variable = 'hogeramugera' %}

テンプレートの継承

{% extends 'layout.twig' %}

って書いておくと、継承してくれます。

あとは。継承元のファイルで

{% block XXXXXX %}{% endblock %}

って書いておいて、継承先のファイルで

{% block XXXXXX %}これを出力{% endblock %}

とかってやると変換してくれるので。
よくやるのが、headのtitleとかを

{% block title %}{% endblock %}

で宣言して継承先で

{% block title %}ほにゃららページ{% endblock %}

とかって使ったりします。

includeもあるんだけど、あんまり使わないなぁ。
使いたいときは

{% include "parts/include.twig" %}

とかって書式で。



大体、これくらいかなぁ。
過不足あったら、適宜修正していきまふ。