Risposte:
Immagino che non sia necessario convertirli $entity
in un array, funzionerebbe semplicemente.
$entity->get('field_name')->getValue();
Cordiali saluti: l'utilizzo kint()
dal devel_kint
modulo ti farà conoscere tutti i metodi disponibili che potrebbero essere utilizzati per accedere agli elementi dell'oggetto, quindi comparativamente var_dump()
è meno utile.
getValue()
funziona per me (sia su 8.1.xe 8.2.x) vedi riferimento api
->getValue()
è generico e funziona indipendentemente dal tipo di campo. Se lo usi ->value
, funziona solo se il valore del campo è memorizzato in una value
proprietà. Non funzionerà per tipi più complessi (ad es. Data o riferimento dell'entità).
in drupal 8, $ node è del nodo class
$node->field_machine_name->getValue();
o
$node->get('field_machine_name')->getValue();
restituirà una matrice di valori.
Se ti aspetti solo uno, puoi anche stringere l'array con
$node->field_machine_name->getString();
o
$node->get('field_machine_name')->getString();
Per i campi dovresti essere in grado di usare $node->body->value
ad esempio. Se non sai quali sono i nomi dei campi, ti consiglio di installare il modulo Devel per Drupal 8 e di ispezionare il nodo tramite like dsm($node)
.
Puoi sempre fare $entity->toArray()
per vedere cosa c'è in un'entità. Anche quando si usa xdebug (ad esempio con phpstorm) è molto difficile dare un senso a un oggetto entità da solo. Dubito che dsm($node)
in Drupal 8 abbia senso. Se insisti nel debug nel browser (ma non dovresti, Drupal 8 è troppo complesso per eseguire il debug senza xdebug) dsm($node->toArray())
è ciò che desideri.
Drupal\Core\Entity\EntityInterface
ha toArray
.
Utilizzare il seguente frammento di codice per ottenere i valori dei campi del nodo
Questo è usato per ottenere l'ID nodo dall'URL
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
Per caricare i dati del nodo utilizzando nid
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
Questo è usato per ottenere il valore del campo.
$terms = $node->get('field_Name')->getValue();
Questo è usato per ottenere il titolo del nodo.
$product_name = $node->getTitle();
Per me, avendo un $entity
(un nodo) questo ha funzionato:
$entity->field_name->getValue();
usando 8.1.
Durante l'utilizzo (l'attuale modo corretto):
$node = \Drupal\node\Entity\Node::load($nid);
$node->get('nid')->value; // returns a raw value - Node ID
// Following both returns array structure containing value/target id nested value.
$node->get('nid')->value();
$node->nid->getValue();
use Drupal\node\Entity\Node
$node = Node::load($nid);
$title = $node->get('title')->value;
O
use Drupal\node\Entity\Node
$title = Node::load($nid)->get('title')->value;
Ecco una bella annotazione sull'accesso ai valori dall'oggetto nodo https://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html
È semplicemente:
$node->get('field_name')->getValue();
Se il campo è un campo di riferimento dell'entità, ci sono alcuni modi speciali per ottenere le entità referenziate.
Per ottenere l'id di destinazione (primo elemento):
$entity->get('field_entity_reference')->target_id;
Per ottenere l'entità caricata (primo elemento):
$entity->get('field_entity_reference')->entity;
Quando si utilizza ->entity
sul campo carica automaticamente l'entità.
Se il campo può contenere più riferimenti, puoi recuperarli tutti in questo modo:
$entities = $entity->get('field_entity_reference')->referencedEntities();
Questo ti darà una serie di entità.