Umi Blog
ウミブログ
こんにちは。久しぶりのブログ投稿となります。
先日Drupalの認定試験であるアクイア認定プログラムのDrupal 8認定トラック全試験に合格し、グランドマスターとなることができました!
弊社では3人目のグランドマスターとなります!
2020年6月3日にDrupal 9のリリースが予定されていますね。
Drupal 8からDrupal 9への変更点の1つとして、Twigが1系から2系にアップデートされます。
今回はTwig2系へのアップデートに伴い、対応が必要となる変更点をご紹介します。
なお本記事の内容はDrupal.orgのPreparing for use of Twig2 in Drupal 9を意訳したものになります。
TwigとはSymfonyフレームワークの一部であるPHPのテンプレートエンジンです。
Drupal 8からデフォルトのテンプレートエンジンとして採用されました。
Drupal 7までのPHP Templateと比較して、記述がシンプルであることに加え、
出力値がデフォルトでサニタイズされることや、テンプレートファイルからデータベースへのアクセスが制限されているなど
セキュリティ面でもメリットがあります。
Twigについてのより詳細な情報はこちらをご参照ください。
それではTwig1からTwig2の主な変更点をご紹介します。
テンプレートファイル(*.html.twig)内の記述において、対応が必要となる変更は以下の通りです。
Twig1では親テンプレートファイル内でインポートされたmacroは子テンプレートでも使用することができました。
Twig2からは子テンプレートファイルでも明示的にインポートする必要があります。
未定義のブロックを表示しようとするとTwig2からは例外を投げるようになります。
そのためブロックを表示する前にif文でブロックが定義されているかどうか確認する必要があります。
※ここでいうblockとはTwigの機能であるblockのことであり、Drupalのブロックとは別物です
{% if block('ブロック名') is defined %}
{{ block('ブロック名')}}
{% endif %}
HTML文字列をエスケープせずに出力する{% raw %}タグは、すでにTwig1系で非推奨となっていました。
Twig2系からはエラーとなるので、{% verbatim %}タグで置き換える必要があります。
※rawフィルター(ex. {{ foo|raw }})は引き続き使用可能です。
関数sameasとdivisiblebyは非推奨になり、代わりにsame asとdivisible byを使用する必要があります。
ちなみにsameasは変数が指定された値と同値かどうかを検証する関数、divisible byは変数が指定された値で割り切れるかどうかを検証する関数です
Twig1系以降、グローバル変数の_selfを通して、\Twig\Templateインスタンスにアクセスすることは非推奨となりました。
Twig2では{{ _self }}が現在のテンプレート名を出力するようになるため、{{ _self.templateName }}としていた箇所を{{ _self }}に置き換える必要があります。
カスタムフィルターなどのTwigの拡張機能をモジュール等で提供している場合は、以下も対応が必要になります。
Twig1系以降、拡張機能を削除する機能は非推奨となっていますが、Twig2で\Twig\Environment::removeExtension()メソッドが削除されます。
Twig1系以降、関数を追加するために\Twig\TwigFunctionクラスを使用することとなっています。
関数を追加するために従来使用することができた以下のクラスおよびインタフェースはTwig2で削除されます。
Twig1系以降、フィルターを追加するために\Twig\TwigFilterクラスを使用することとなっています。
フィルターを追加するために従来使用することができた以下のクラスおよびインタフェースはTwig2で削除されます。
Twig1からTwig2への変更点についてご紹介しました。
大半が非推奨であった機能の削除ですので、それほど大きな影響を与える変更はない印象です。 今後も非推奨の記述は使用を控え、いずれ来るアップデートに備えておきましょう。
最後に、今回ご紹介した内容はUpgrade Statusモジュールを使用してチェックすることができるようなので、こちらも合わせてお試しください。
小さなご意見も、私たちにとっては大きなヒントです!
ぜひ率直なご感想をお寄せください
この

Masters of Drupal Engineering.
人に、