web-dev-qa-db-ja.com

特定のTwigファイルのキャッシュを削除します

現在ログインしているユーザーの名前を\Drupal::currentUser()->getUsername()を使用してヘッダーに表示していますが、すでにキャッシュされているページが表示されています。 \Drupal::service('page_cache_kill_switch')->trigger()を使用して特定のページのキャッシュを無効にできることはわかっていますが、これはheader.html.twigファイルでは機能しません。

パフォーマンスに影響を与えずにそれをどのように達成できますか?

2
Sarath Kumar

ユーザーのキャッシュコンテキストとキャッシュタグが必要です。

$variables['username'] = [
  '#markup' => \Drupal::currentUser()->getUsername(),
  '#cache' => [
    'contexts' => [
      'user',
    ],
    'tags' => [
      'user:' . \Drupal::currentUser()->id(),
    ],
  ],
];

これをプリプロセスフックに直接追加できますが、レンダリングされる出力はユーザーごとに異なります。多数のユーザーの場合、これをレイジービルダーコールバックに配置すると、自動プレースホルダーの条件に一致し、ページの読み込みパフォーマンスに影響を与えることなくBigPipeを通じてレイジーロードできます。

https://www.drupal.org/docs/8/api/render-api/auto-placeholdering を参照してください

4
4k4