Antworten:
Ich denke, Sie müssen nicht $entity
in ein Array konvertieren , dies würde einfach funktionieren.
$entity->get('field_name')->getValue();
Zu Ihrer Information: Wenn Sie kint()
vom devel_kint
Modul aus verwenden, werden Sie über alle verfügbaren Methoden informiert, die für den Zugriff auf die Objektelemente verwendet werden können. Dies var_dump()
ist vergleichsweise weniger hilfreich.
getValue()
funktioniert für mich (beide auf 8.1.x und 8.2.x) siehe api reference
->getValue()
ist generisch und funktioniert unabhängig vom Feldtyp. Wenn Sie verwenden ->value
, funktioniert dies nur, wenn der Feldwert in einer value
Eigenschaft gespeichert ist . Bei komplexeren Typen (z. B. Datum oder Entitätsreferenz) funktioniert dies nicht.
In Drupal 8 ist $ node ein Klassenknoten
$node->field_machine_name->getValue();
oder
$node->get('field_machine_name')->getValue();
Gibt ein Array von Werten zurück.
Wenn Sie nur einen erwarten, können Sie das Array auch mit stringifizieren
$node->field_machine_name->getString();
oder
$node->get('field_machine_name')->getString();
Für Felder sollten Sie $node->body->value
beispielsweise verwenden können. Wenn Sie die Feldnamen nicht kennen, empfehle ich, das Devel- Modul für Drupal 8 zu installieren und den Knoten über like zu überprüfendsm($node)
.
Sie können jederzeit $entity->toArray()
sehen, was sich in einer Entität befindet. Selbst wenn Sie xdebug verwenden (zum Beispiel mit phpstorm), ist es sehr schwierig, ein Entity-Objekt für sich zu erfassen. Ich bezweifle, dass dsm($node)
Drupal 8 irgendeinen Sinn ergibt. Wenn Sie auf dem Debuggen in Ihrem Browser bestehen (sollten Sie aber nicht, Drupal 8 ist zu komplex, um ohne xdebug zu debuggen), dsm($node->toArray())
ist das genau das, was Sie wollen.
Verwenden Sie den folgenden Codeausschnitt, um die Werte der Knotenfelder abzurufen
Dies wird verwendet, um die Node-ID von der URL abzurufen
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
Um Knotendaten mit nid zu laden
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
Dies wird verwendet, um den Feldwert abzurufen.
$terms = $node->get('field_Name')->getValue();
Dies wird verwendet, um den Knotentitel zu erhalten.
$product_name = $node->getTitle();
Für mich hat das mit einem $entity
(einem Knoten) funktioniert:
$entity->field_name->getValue();
unter Verwendung von 8.1.
Während der Benutzung (auf die richtige Art und Weise):
$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;
Oder
use Drupal\node\Entity\Node
$title = Node::load($nid)->get('title')->value;
Hier finden Sie nützliche Informationen zum Zugriff auf Werte aus dem Knotenobjekt https://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html
Es ist einfach:
$node->get('field_name')->getValue()
Wenn das Feld ein Entitätsreferenzfeld ist, gibt es einige spezielle Möglichkeiten, um die referenzierten Entitäten abzurufen.
So erhalten Sie die Ziel-ID (erstes Element):
$entity->get('field_entity_reference')->target_id
So rufen Sie die geladene Entität (erstes Element) ab:
$entity->get('field_entity_reference')->entity
Bei Verwendung ->entity
auf dem Feld wird die Entität automatisch geladen.
Wenn das Feld mehrere Referenzen enthalten kann, können Sie alle wie folgt abrufen:
$entities = $entity->get('field_entity_reference')->referencedEntities();
Das gibt Ihnen eine Reihe von Entitäten.