web-dev-qa-db-ja.com

言語によってブロックをキャッシュする正しい方法は何ですか?

右側のメニューにカスタムブロックを含む多言語サイトがあります。そのコンテンツは、BlockBaseのbuild()関数によって動的に生成され、インターフェイス言語に応じて変化します。言語ごとにこれらを一度キャッシュしたい。私が使用した他の場所:

public function build() {
 $node = \Drupal::routeMatch()->getParameter('node');
 return array(
  '#theme' => 'my_template',
   ....
  '#cache' => [
    'tags' => [
      'node:' . $node->getId()
    ],
  ],
);

}

私はこのアプローチを使用しましたが、動作するように見えますが、すべての呼び出しでテンプレートがまだ処理されていないことをテストする方法はわかりません。

public function build() {
 return array(
  '#theme' => 'my_template',
   ....
  '#cache' => [
    'tags' => [
      'language:' . \Drupal::languageManager()->getCurrentLanguage()->getId()
    ],
  ],
);

}

これは正しい方法ですか?ドキュメントでnode:接頭辞の例を見つけることができましたが、language:については何もありません

3
Nic

言語コンテキストを使用する必要があります。ここではタグを使用しないでください。

このような: '#cache' => ['contexts' => ['languages:language_interface']],

詳しくはこちらをご覧ください: https://www.drupal.org/developing/api/8/cache/contexts

6
Rainer Feike