Drupal\node\Entity\Node Object ([in_preview] => [values: protected] => Array ([vid] => Array ([x-default] => 1)
[langcode] => Array
(
[x-default] => en
)
[field_destination] => Array
(
[x-default] => Array
(
[0] => Array
(
[target_id] => 2
)
)
)
Impossible d'obtenir directement la valeur field_destination. C'est un terme de taxonomie attaché au type de contenu. Toute aide appréciée.
Pour s'appuyer sur VJamie's réponse.
Vous devrez soit définir une instruction d'utilisation en haut de votre script;
use Drupal\taxonomy\Entity\Term;
Ou, préfixez l'instance de classe avec l'espace de noms;
$term = \Drupal\taxonomy\Entity\Term::load($node->get('field_destination')->target_id);
Cela éliminera les fatals.
Vous pouvez également utiliser certaines méthodes de EntityReferenceFieldItemList: Obtient les entités référencées par ce champ, en préservant les deltas d'élément de champ:
$node->get('field_destination')->referencedEntities();
J'espère que cela vous sera utile
Le code suivant vous fournira le terme d'objet dont vous avez besoin.
$term = Term::load($node->get('field_destination')->target_id);
Si vous avez besoin du nom de ce terme, vous pouvez procéder comme suit
$name = $term->getName();
J'espère que cela vous aidera!
Faites ceci
use Drupal\taxonomy\Entity\Term;
$term = Term::load($node->get('field_destination')->target_id);
$termname = $term->getName();
Dans drupal8, nous suivions l'approche oops pour obtenir les valeurs.
La propriété entity
est accessible directement à partir de n'importe quel champ de type référence.
$node = 'myNode';
$termEntity = $node->get('field_taxonomy_reference')->entity;
if ($termEntity instanceof TermInterface) {
$termLabel = $termEntity->label();
}
C'est la bonne façon de le réaliser
use Drupal\taxonomy\Entity\Term;
function modulename_node_presave(Drupal\Core\Entity\EntityInterface $entity) {
switch ($entity->bundle()) {
case 'programs':
$term = Term::load($entity->get('field_program_names')->target_id);
$name = $term->getName();
$entity->setTitle($name);
break;
}
}