PHPTemplateとTwigのパラダイムの比較
Twigについて
TwigはPHPベースのコンパイル型テンプレート言語です。Webページがレンダリングされるとき、Twigエンジンはテンプレートを取得して「コンパイルされた」PHPテンプレートに変換し、sites/default/files/php/twigの保護されたディレクトリに保存します。コンパイルは一度実行され、テンプレートファイルは再利用のためにキャッシュされ、Twigキャッシュがクリアされると再コンパイルされます。
Drupal TwigイニシアチブはSymfonyイニシアチブと同じ動機を持っています:開発者がDrupalに適切に集中できるようにする、最新で強力なOOPベースのエンジンを導入することです。
1. Docblock
PHPTemplate:
<?php
/**
* @file
* File description
*/
?>
Twig:
{#
/**
* @file
* File description
*/
#}
2. ファイル名と関数名
PHPTemplate file: node--article.tpl.php
Twig file: node--article.html.twig
PHPTemplate function: THEME_node_links()
Twig file: node-links.html.twig
3. 変数
変数の出力:
PHPTemplate: <div class="content"><?php print $content; ?></div>
Twig: <div class="content">{{ content }}</div>
ハッシュキー要素の出力[1]
PHPTemplate: <?php print $item['#item']['alt']; ?>
Twig: {{ item['#item'].alt }}
変数の割り当て:
PHPTemplate: <?php $custom_var = $content->comments; ?>
Twig: {% set custom_var = content.comments %}
配列の割り当て:
PHPTemplate: <?php $args = array('@author' => $author, '@date' => $created); ?>
Twig: {% set args = {'@author': author, '@date': created} %}
4. 条件
PHPTemplate: <?php if ($content->comments): endif; ?>
Twig: {% if content.comments %} {% endif %}
PHPTemplate: <?php if (!empty($content->comments)): endif; ?>
Twig: {% if content.comments is not empty %} {% endif %}
PHPTemplate: <?php if (isset($content->comments)): endif; ?>
Twig: {% if content.comments is defined %} {% endif %}
PHPTemplate: <?php if ($count > 0): endif; ?>
Twig: {% if count > 0 %} {% endif %}
5. 制御構造
PHPTemplate: <?php foreach ($users as $user) {} ?>
Twig: {% for user in users %} {% endfor %}
6. フィルター
HTML特殊文字のエスケープ:
PHPTemplate: <?php print check_plain($title); ?>
Twig[2]: {{ title }}
未加工の値:
PHPTemplate: <?php print $title; ?>
Twig: {{ title|raw }}
翻訳:
PHPTemplate: <? Php print t ('Home'); ?>
Twig: {{'Home' | t}}
置換付き翻訳:
PHPTemplate: <?php print t('Welcome, @username', array('@username' => $user->name)); ?>
Twig: {{ 'Welcome, @username'|t({ '@username': user.name }) }}
Drupal 8 Twig(transタグ拡張を使用):
{% set username = user.name %}
{% trans %}
Welcome, {{ username }}
{% endtrans %}
リストの展開:
PHPTemplate: <? Php echo implode (',', $ usernames); ?>
Twig: {{usernames | присоединиться(', ') }}
マークアップ付きリストの展開:
Twig: {{usernames | safe_join (',')}}
PHPTemplateの例では、$usernamesが文字列の配列である必要があります。これは、「usernames」が文字列の配列であるOriginal Twigの例にも当てはまります。一方、Drupal 8 Twigの例では、レンダリング可能なオブジェクトの配列が必要です。これは実際にはDrupal 8 Twigと元のTwigの根本的な違いです。Drupal 8 Twigは、プレーンテキストとレンダリング配列の両方を「出力」します。
この例のもう1つの側面は、3つの例すべてが同じ出力を生成することが期待されていることですが、実際にはそうではありません(デフォルトでは)。この例を見てください:
{% set numbers = [{'#markup': 'One'}, {'#markup':'Two'}, {'#markup':'Three'}] %}
{{ numbers }}
上記は、要素がカンマで区切って出力されることを想定しています。しかし、出力は次のようになります:OneTwoThree
7. 空白の制御
Twigには、テンプレートファイルの構造に使用される空白を削除できる空白制御があります。
<div class="body">
{{- block.content -}}
</div>
これは次と同じです:
<div class="body">{{ block.content }}</div>
注意
- ハッシュキー要素の例は将来変更される可能性があります
- 2番目の例では、Twigがデータのクリーニングを担当することを示しています。以前は、これを処理するのはテンプレートファイルまたは前処理関数の前でした。この変更は、Drupal 8用のPHPTemplateテーマを作成しようとしている人にとって非常に重要です。独自のデータをクリーンアップする必要があります。↩︎︎