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
その後、正しい名前を取得しましたが、なぜですか?これを修正して、すでに正しいユーザー名を表示するにはどうすればよいですか?
現在のコンテキストとユーザーエンティティからユーザー名を取得していますが、それをダム文字列値にしてテンプレートに渡します。キャッシュメタデータを含めて、この値がどこから来ているのか、どのような状況で変更される可能性があるのかを定義します。
$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