Jawaban:
Saya kira Anda tidak perlu mengubahnya $entity
menjadi array, ini hanya akan berhasil.
$entity->get('field_name')->getValue();
FYI: Menggunakan kint()
dari devel_kint
modul akan memberi tahu Anda semua metode yang tersedia yang dapat digunakan untuk mengakses elemen objek, sehingga relatif var_dump()
kurang membantu.
getValue()
bekerja untuk saya (keduanya pada 8.1.x dan 8.2.x) lihat referensi api
->getValue()
bersifat generik dan akan berfungsi terlepas dari jenis bidangnya. Jika Anda menggunakan ->value
, itu hanya berfungsi jika nilai bidang disimpan di value
properti. Ini tidak akan bekerja untuk tipe yang lebih kompleks (mis. Tanggal atau referensi entitas).
di drupal 8, $ node menjadi node kelas
$node->field_machine_name->getValue();
atau
$node->get('field_machine_name')->getValue();
akan mengembalikan array nilai.
Jika Anda hanya mengharapkan satu, Anda mungkin juga harus menggunakan array
$node->field_machine_name->getString();
atau
$node->get('field_machine_name')->getString();
Untuk bidang, Anda harus dapat menggunakan $node->body->value
misalnya. Jika Anda tidak tahu apa nama fieldnya, saya sarankan untuk menginstal modul Devel untuk Drupal 8 dan memeriksa node melalui like dsm($node)
.
Anda selalu dapat melakukan $entity->toArray()
untuk melihat apa yang ada dalam suatu entitas. Bahkan ketika menggunakan xdebug (misalnya dengan phpstorm) membuat rasa objek entitas sendiri sangat sulit. Saya ragu dsm($node)
dalam Drupal 8 masuk akal. Jika Anda bersikeras melakukan debugging di dalam browser (tetapi Anda seharusnya tidak melakukannya, Drupal 8 terlalu rumit untuk di-debug tanpa xdebug) dsm($node->toArray())
adalah yang Anda inginkan.
Drupal\Core\Entity\EntityInterface
telah toArray
.
Gunakan potongan kode berikut untuk mendapatkan nilai-nilai bidang simpul
Ini digunakan untuk mendapatkan id node dari url
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
Untuk memuat data simpul menggunakan nid
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
Ini digunakan untuk mendapatkan nilai bidang.
$terms = $node->get('field_Name')->getValue();
Ini digunakan untuk mendapatkan judul simpul.
$product_name = $node->getTitle();
Bagi saya, memiliki $entity
(simpul) ini berfungsi:
$entity->field_name->getValue();
menggunakan 8.1.
Saat menggunakan (cara yang benar sebenarnya):
$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;
Atau
use Drupal\node\Entity\Node
$title = Node::load($nid)->get('title')->value;
Berikut ini adalah tulisan yang bagus tentang mengakses nilai dari objek simpul https://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html
Sederhana saja:
$node->get('field_name')->getValue();
Jika bidang adalah bidang referensi entitas, ada beberapa cara khusus untuk mendapatkan entitas yang direferensikan.
Untuk mendapatkan id target (elemen pertama):
$entity->get('field_entity_reference')->target_id;
Untuk mendapatkan entitas yang dimuat (elemen pertama):
$entity->get('field_entity_reference')->entity;
Saat digunakan ->entity
di lapangan, ia secara otomatis memuat entitas.
Jika bidang dapat berisi beberapa referensi, Anda dapat mengambil semuanya seperti ini:
$entities = $entity->get('field_entity_reference')->referencedEntities();
Itu akan memberi Anda array entitas.