J'ai un champ de référence de terme de taxonomie attaché à mon compte d'utilisateur.
J'ai essayé d'obtenir la valeur par programme de la même manière que j'obtiens la valeur des champs de texte, mais cela ne fonctionne pas.
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\user\Entity\User;
$account = User::load($account->id());
// Returns the correct value.
$textfield = $account->get('field_textfield')->value;
// Does not return the correct value.
$termreference = $account->get('field_termreference')->value;
Comment suis-je censé obtenir la valeur (nom) du terme référencé par programme?
Comme le terme de taxonomie est une référence, la valeur (ou l'étiquette) n'est pas stockée dans l'entité utilisateur, juste le target_id. Vous devez donc utiliser:
$termreference = $account->get('field_termreference')->target_id;
Cela devrait être votre code:
use Drupal\Core\Session\AccountProxyInterface;
use Drupal\user\Entity\User;
$account = User::load($account->id());
// Returns the correct value.
$textfield = $account->get('field_textfield')->value;
// You need to use the target_id to access to the value.
$termreference = $account->get('field_termreference')->target_id;
Vous devez maintenant rechercher l'étiquette:
$term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($termreference);
$name = $term->getName();
Votre étiquette de taxonomie (nom) sera dans $name
.
Il existe une façon légèrement plus propre de procéder. Lors de l'appel de ->get('field_name')
sur un champ de référence, il retourne une instance de EntityReferenceFieldItemList
. Vous pouvez l'utiliser comme un tableau et accéder au target_id
Et charger manuellement la \Drupal::entityTypeManger()
à sous-charger, mais cette classe a en fait une méthode qui le fait pour vous:
$entity->get('field_tags')->referencedEntities();