it-swarm.com.de

Wie greife ich auf einen Feldwert für ein Entitätsobjekt (z. B. einen Knoten) zu?

node_load((int) $nid) lädt eine vollständig aufgefüllte Knotenentität. $node->title->value erhält den Titel, aber wie greife ich auf Feldwerte in Drupal 8) zu?

62
dbj44

Ich denke, Sie müssen $entity Nicht in ein Array konvertieren, dies würde einfach funktionieren.

$entity->get('field_name')->getValue();

Zu Ihrer Information: Wenn Sie kint() aus dem Modul devel_kint Verwenden, werden Sie über alle verfügbaren Methoden informiert, die für den Zugriff auf die Objektelemente verwendet werden können. Daher ist var_dump() vergleichsweise weniger hilfreich.

95
Ashkar A.Rahman

in drupal 8, $ node gehört zum 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();
58
Matoeil

Für Felder sollten Sie beispielsweise $node->body->value Verwenden können. Wenn Sie die Feldnamen nicht kennen, empfehle ich, das Modul Devel für Drupal 8) zu installieren und den Knoten über like dsm($node) zu überprüfen.

35
tenken

Sie können jederzeit $entity->toArray() ausführen, um zu sehen, was sich in einer Entität befindet. Selbst wenn Sie xdebug verwenden (zum Beispiel mit phpstorm), ist es sehr schwierig, ein Entitätsobjekt für sich allein zu verstehen. Ich bezweifle, dass dsm($node) in Drupal 8 Sinn macht. Wenn Sie auf dem Debuggen im Browser bestehen (aber Sie sollten nicht, Drupal) 8 ist zu komplex, um ohne xdebug zu debuggen.) dsm($node->toArray()) ist das, was Sie wollen.

17
user49

Verwenden Sie das folgende Codeausschnitt, um Knotenfeldwerte abzurufen

Dies wird verwendet, um die Knoten-ID von der URL abzurufen

$nid = \Drupal::routeMatch()->getRawParameter($node_id);

So laden Sie Knotendaten mit nid

$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 abzurufen.

$product_name = $node->getTitle();
14
Swapnil Bijwe

Für mich mit einem $entity (ein Knoten) das hat funktioniert:

$entity->field_name->getValue();

mit 8.1.

7
Alex

Während der Verwendung (der tatsächlich richtige Weg):

$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();
6
Francis

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 erhalten Sie die geladene Entität (erstes Element):

$entity->get('field_entity_reference')->entity;

Beim Benutzen ->entity auf dem Feld gibt es automatisch die geladene Entität zurück.

Wenn das Feld mehrere Referenzen enthalten kann, können Sie sie alle wie folgt abrufen:

$entities = $entity->get('field_entity_reference')->referencedEntities();

Dadurch wird ein Array von Entitäten zurückgegeben.

6
user72672
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 ist Nice schreiben über den Zugriff auf Werte aus dem Knotenobjekt https://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html

5
pwaterz