カスタムブロックにキャッシュコンテキストを設定する正しい方法は何ですか?
ページごとに固有でなければならないブロックがログアウトしたユーザーのものではないという問題に遭遇しました。問題は、カスタムフィルターを含むビュー検索ページにあるカスタムブロックプラグインです(公開されたフィルターのカスタム置換のようなものです。ブロックは/ admin / structure / blockを介して配置されます)。 Drupal 8について学んだことに基づいて、キャッシュコンテキストをビルドアレイに追加しました。 public function build() { $search_form = \Drupal::formBuilder()->getForm('Drupal\mymodule\Form\SearchForm'); return [ 'search_form' => $search_form, '#cache' => ['contexts' => ['url.path', 'url.query_args']] ]; } ただし、ログアウトするとブロックが最初のビューにキャッシュされ、URLが変更されてもブロックの新しいバージョンが表示されなかったため、これは正しくないようです。 問題の原因となっているのはビューページの可能性があると思いましたが、ビューページのキャッシュをオフにしても問題は解決しませんでした。 たとえば、preprocess_blockフックを使用して、問題をいくつかの方法で修正できました。 function mymodule_preprocess_block__mycustomsearchblock(&$variables) { $variables['#cache']['contexts'][] = 'url.path'; $variables['#cache']['contexts'][] = 'url.query_args'; } しかし、それは私が自分のブロックのビルド配列にキャッシュコンテキストを単に入れることができなかったことを気にしました。 私のブロックはBlockBaseを拡張しているので、特にコア内の一部のモジュールがこの方法で実行しているのを見たので、getCacheContexts()メソッドを試すことにしました。 public function getCacheContexts() { return Cache::mergeContexts(parent::getCacheContexts(), ['url.path', …