右側のメニューにカスタムブロックを含む多言語サイトがあります。そのコンテンツは、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:
については何もありません
言語コンテキストを使用する必要があります。ここではタグを使用しないでください。
このような: '#cache' => ['contexts' => ['languages:language_interface']],
詳しくはこちらをご覧ください: https://www.drupal.org/developing/api/8/cache/contexts