Odpowiedzi:
Myślę, że nie trzeba konwertować $entity
na tablicę, to po prostu działałoby.
$entity->get('field_name')->getValue();
FYI: Korzystanie kint()
z devel_kint
modułu da ci znać wszystkie dostępne metody, które mogą być użyte do uzyskania dostępu do elementów obiektu, więc względnie var_dump()
jest mniej pomocny.
getValue()
działa dla mnie (zarówno w wersji 8.1.x, jak i 8.2.x) patrz odnośnik do interfejsu API
->getValue()
jest ogólny i działa niezależnie od typu pola. Jeśli używasz ->value
, działa to tylko wtedy, gdy wartość pola jest przechowywana we value
właściwości. Nie będzie działać w przypadku bardziej złożonych typów (np. Data lub odniesienie do encji).
w drupal 8, $ node jest węzłem klasy
$node->field_machine_name->getValue();
lub
$node->get('field_machine_name')->getValue();
zwróci tablicę wartości.
Jeśli oczekujesz tylko jednego, równie dobrze możesz skreślić tablicę za pomocą
$node->field_machine_name->getString();
lub
$node->get('field_machine_name')->getString();
W przypadku pól powinieneś być w stanie użyć $node->body->value
na przykład. Jeśli nie wiesz, jakie są nazwy pól, polecam zainstalowanie modułu Devel dla Drupala 8 i sprawdzenie węzła za pomocą like dsm($node)
.
Zawsze możesz zrobić, $entity->toArray()
aby zobaczyć, co jest w bycie. Nawet przy użyciu xdebug (na przykład z phpstorm) samodzielne zrozumienie obiektu bytu jest bardzo trudne. Wątpię dsm($node)
w Drupal 8, który ma jakiś sens. Jeśli nalegasz na debugowanie w przeglądarce (ale nie powinieneś, Drupal 8 jest zbyt skomplikowany, aby debugować bez xdebug), dsm($node->toArray())
to jest to, czego chcesz.
Użyj następującego fragmentu kodu, aby uzyskać wartości pól węzła
Służy do uzyskania identyfikatora węzła z adresu URL
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
Aby załadować dane węzła za pomocą nid
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
Służy do uzyskania wartości pola.
$terms = $node->get('field_Name')->getValue();
Służy do uzyskania tytułu węzła.
$product_name = $node->getTitle();
Dla mnie posiadanie $entity
(węzła) działało:
$entity->field_name->getValue();
za pomocą 8.1.
Podczas korzystania (właściwy właściwy sposób):
$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;
Lub
use Drupal\node\Entity\Node
$title = Node::load($nid)->get('title')->value;
Oto miło napisać o dostępie do wartości z obiektu węzła https://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html
To po prostu:
$node->get('field_name')->getValue()
Jeśli pole jest polem referencyjnym encji, istnieją specjalne sposoby uzyskania encji referencyjnych.
Aby uzyskać identyfikator docelowy (pierwszy element):
$entity->get('field_entity_reference')->target_id
Aby uzyskać załadowany obiekt (pierwszy element):
$entity->get('field_entity_reference')->entity
Podczas używania ->entity
na polu automatycznie ładuje byt.
Jeśli pole może zawierać wiele referencji, możesz pobrać je wszystkie w następujący sposób:
$entities = $entity->get('field_entity_reference')->referencedEntities();
To da ci szereg bytów.