node_load((int) $nid)
โหลดเอนทิตีโหนดที่มีประชากรเต็ม $node->title->value
รับหัวเรื่อง แต่ฉันจะเข้าถึงค่าฟิลด์ใน Drupal 8 ได้อย่างไร
node_load((int) $nid)
โหลดเอนทิตีโหนดที่มีประชากรเต็ม $node->title->value
รับหัวเรื่อง แต่ฉันจะเข้าถึงค่าฟิลด์ใน Drupal 8 ได้อย่างไร
คำตอบ:
ฉันเดาว่าคุณไม่จำเป็นต้องแปลง$entity
เป็นอาเรย์
$entity->get('field_name')->getValue();
FYI: การใช้kint()
จากdevel_kint
โมดูลจะแจ้งให้คุณทราบถึงวิธีการที่มีอยู่ทั้งหมดที่สามารถใช้เพื่อเข้าถึงองค์ประกอบวัตถุดังนั้นการเปรียบเทียบจึงvar_dump()
มีประโยชน์น้อยกว่า
getValue()
ใช้งานได้สำหรับฉัน (ทั้งบน 8.1.x และ 8.2.x) ดูการอ้างอิง api
->getValue()
เป็นเรื่องทั่วไปและจะทำงานโดยไม่คำนึงถึงประเภทของฟิลด์ หากคุณใช้จะใช้งาน->value
ได้เฉพาะเมื่อค่าฟิลด์ถูกเก็บไว้ในvalue
คุณสมบัติ มันจะไม่ทำงานสำหรับประเภทที่ซับซ้อนมากขึ้น (เช่นวันที่หรือการอ้างอิงนิติบุคคล)
ใน drupal 8, $ node เป็นคลาสโหนด
$node->field_machine_name->getValue();
หรือ
$node->get('field_machine_name')->getValue();
จะส่งกลับอาร์เรย์ของค่า
หากคุณคาดหวังเพียงหนึ่งเดียวคุณก็อาจสร้างอาร์เรย์ด้วย
$node->field_machine_name->getString();
หรือ
$node->get('field_machine_name')->getString();
สำหรับเขตข้อมูลที่คุณควรจะสามารถใช้$node->body->value
เป็นตัวอย่าง หากคุณไม่ได้รู้ว่าสิ่งที่ชื่อเขตที่มีผมขอแนะนำให้ติดตั้งDevelโมดูล Drupal 8 dsm($node)
และตรวจสอบโหนดผ่านเช่น
คุณสามารถทำได้$entity->toArray()
เพื่อดูว่ามีอะไรอยู่ในเอนทิตี แม้เมื่อใช้ xdebug (เช่น phpstorm) การทำความเข้าใจวัตถุเอนทิตี้ของตัวเองนั้นเป็นเรื่องยากมาก ฉันสงสัยdsm($node)
ใน Drupal 8 ไม่สมเหตุสมผล หากคุณยืนยันในการแก้จุดบกพร่องในเบราว์เซอร์ (แต่คุณไม่ควร Drupal 8 นั้นซับซ้อนเกินกว่าที่จะทำการดีบักโดยไม่มี xdebug) dsm($node->toArray())
เป็นสิ่งที่คุณต้องการ
ใช้โค้ดต่อไปนี้เพื่อรับค่าฟิลด์โหนด
สิ่งนี้ใช้เพื่อรับ node id จาก url
$nid = \Drupal::routeMatch()->getRawParameter($node_id);
ในการโหลดข้อมูลโหนดโดยใช้ nid
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
ใช้เพื่อรับค่าฟิลด์
$terms = $node->get('field_Name')->getValue();
สิ่งนี้ใช้เพื่อรับชื่อโหนด
$product_name = $node->getTitle();
สำหรับฉันการมี$entity
(โหนด) สิ่งนี้ทำงาน:
$entity->field_name->getValue();
ใช้ 8.1
ในขณะที่ใช้ (วิธีที่ถูกต้องจริง):
$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;
หรือ
use Drupal\node\Entity\Node
$title = Node::load($nid)->get('title')->value;
นี่เป็นบทความที่ดีเกี่ยวกับการเข้าถึงค่าจากวัตถุโหนดhttps://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html
มันเป็นเพียง:
$node->get('field_name')->getValue()
ถ้าเขตข้อมูลนั้นเป็นเขตข้อมูลการอ้างอิงเอนทิตีมีวิธีพิเศษบางอย่างในการรับเอนทิตีที่อ้างอิง
วิธีรับรหัสเป้าหมาย (องค์ประกอบแรก):
$entity->get('field_entity_reference')->target_id
ในการรับเอนทิตีที่โหลด (องค์ประกอบแรก):
$entity->get('field_entity_reference')->entity
เมื่อใช้งาน->entity
บนสนามมันจะโหลดเอนทิตีโดยอัตโนมัติ
หากฟิลด์สามารถมีการอ้างอิงหลายรายการคุณสามารถดึงข้อมูลเหล่านี้ได้ทั้งหมด:
$entities = $entity->get('field_entity_reference')->referencedEntities();
ที่จะทำให้คุณมีหลายหน่วยงาน