node_load((int) $nid)
ładuje w pełni zapełnioną jednostkę węzła. $node->title->value
otrzymuje tytuł, ale jak uzyskać dostęp do wartości pól w Drupal 8?
63
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 wevalue
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
lub
zwróci tablicę wartości.
Jeśli oczekujesz tylko jednego, równie dobrze możesz skreślić tablicę za pomocą
lub
źródło
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ą likedsm($node)
.źródło
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.źródło
Drupal\Core\Entity\EntityInterface
matoArray
.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
Aby załadować dane węzła za pomocą nid
Służy do uzyskania wartości pola.
Służy do uzyskania tytułu węzła.
źródło
Dla mnie posiadanie
$entity
(węzła) działało:za pomocą 8.1.
źródło
Podczas korzystania (właściwy właściwy sposób):
źródło
Lub
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
źródło
To po prostu:
Jeśli pole jest polem referencyjnym encji, istnieją specjalne sposoby uzyskania encji referencyjnych.
Aby uzyskać identyfikator docelowy (pierwszy element):
Aby uzyskać załadowany obiekt (pierwszy element):
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:
To da ci szereg bytów.
źródło