フィルター - Twigテンプレートでの変数の変更
Twigのフィルターは変数を変更するために使用できます。フィルターはパイプ記号で変数から分離されます。括弧内にオプションの引数を取ることができます。複数のフィルターをチェーンできます。1つのフィルターの出力が次のフィルターに適用されます。
例:
{{ content|safe_join(", ")|lower }}
フィルター処理の前に要素をレンダリングする必要がある場合があります:
{{ item|render|filter }}
Twigには多くの組み込みフィルターが付属しており、公式ドキュメントで確認できます。Drupalには独自のフィルターが多数あります。
Drupal固有のフィルター
これらはTwigExtension::getFilters()で宣言されています。
翻訳フィルター
trans
このフィルター(代替としてt)は、Drupalのt()関数に変数を渡し、翻訳された文字列を返します。このフィルターは、ユーザーに表示されるテンプレートに手動で配置されたインターフェース文字列に使用する必要があります。
例:
<a href="{{ url('<front>') }}" title="{{ 'Home'|t }}" rel="home" class="site-logo"></a>
placeholder
このフィルターはコンテンツをHTMLにエスケープし、drupal_placeholder()を使用してフォーマットするため、強調表示されたテキストを表示できます。
例:
{% trans %}Submitted on {{ date|placeholder }}{% endtrans %}
安全でない翻訳
一部のテンプレートは安全ではなく、変数を直接翻訳に渡すため、使用すべきではありません。これにより翻訳する文字列のリストが肥大化するだけでなく、特に出力がユーザーによって入力される可能性がある場合は、潜在的な脆弱性にもなります。誤った翻訳の例をいくつか示します:
{# DO NOT DO THIS #}
{{ var1|t }}
{{ var1|placeholder }}
{% trans %}{{ var1 }}{% endtrans %}
追加のフィルター
clean_class
このフィルターは、有効なHTMLクラス名として使用するために文字列を準備します。Html::getClass()を参照してください
clean_id
このフィルターは、有効なHTML IDとして使用するために文字列を準備します。Html::getID()を参照してください
format_date
このフィルターは、フォーマットされた日付文字列として使用するためにタイムスタンプを準備します。DateFormatter::format()を参照してください
raw
このフィルターは、特にユーザーによって入力される可能性のあるデータを出力する場合は、可能な限り避けるべきです。Drupal 8の自動エスケープの詳細については、このページを参照してください。
render
このフィルターはrender()関数のラッパーです。レンダリング配列を受け取り、レンダリングされたHTMLマークアップを出力します。これは、追加のフィルター(タグの解析など)を適用したい場合や、レンダリングされた出力に基づいて条件を作成したい場合(空の文字列を返す空でないレンダリング配列がある場合など)に役立ちます。また、文字列や特定のオブジェクト(主にtoString()メソッドを実装するもの)にも使用できます。
safe_join
safe_joinフィルターは、提供された区切り文字で複数の文字列を結合します。TwigExtension::safeJoin()を参照してください。
例:
{{ items|safe_join(', ') }}
これにより、items変数の各文字列がカンマで区切られて結合されて出力されます。
without
withoutフィルターは、レンダリング配列のコピーを作成し、フィルターに渡される引数で指定されたキーで子要素を削除します。コピーはそれらの要素なしで出力できます。元のレンダリング配列は引き続き利用可能で、Twigテンプレートで子要素を完全に出力するために使用できます。twig_withoutを参照してください。
例:
{{ content|without('links') }}
content.linksを除いて、content変数のすべてを出力します。
{{ content|without('links', 'field_some_data') }}
表示から2つの要素を除外する例です。これにより「links」と「field_some_data」が除外されます。