web-dev-qa-db-ja.com

ユーザーデータがキャッシュされ、誤ったユーザー名が表示されるのを防ぐにはどうすればよいですか?

Drupal 8サイトを構築しました。ブロックにユーザー名と姓を表示しています。これは.themeファイルからの前処理のコードです。

$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());

$firstname = $user->get('field_firstname')->value;

$firstname = $firstname;
$variables['firstname'] = $firstname;

次に、ブロックimで:Hello {{ firstname }}

そして、それは私のではなく最後のユーザーを示しています。私がする時 drush crその後、正しい名前を取得しましたが、なぜですか?これを修正して、すでに正しいユーザー名を表示するにはどうすればよいですか?

1
lucasvm1980

現在のコンテキストとユーザーエンティティからユーザー名を取得していますが、それをダム文字列値にしてテンプレートに渡します。キャッシュメタデータを含めて、この値がどこから来ているのか、どのような状況で変更される可能性があるのか​​を定義します。

$user = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());
$firstname = $user->get('field_firstname')->value;

$variables['firstname'] = [
  '#plain_text' => $firstname,
  '#cache' => [
    'contexts' => ['user'],
    'tags' => $user->getCacheTags(),
  ],
];

詳細 https://www.drupal.org/docs/8/api/render-api/cacheability-of-render-arrays

2
4k4