web-dev-qa-db-fra.com

Comment accéder par programmation à la valeur d'une référence de terme de taxonomie?

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?

5
Patrick Kenny

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.

8
Adrian Cid Almaguer

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();
0
jpschroeder