ฉันพบว่าปัญหาที่ใหญ่ที่สุดในการทำงานกับ Drupal 8 คือฉันไม่สามารถรับข้อมูลที่ต้องการได้ Drupal 8 ต้องการให้ฉันใช้วิธีสาธารณะแทนที่จะเจาะลึกวัตถุด้วยตนเอง ปัญหาคือฉันไม่สามารถหาวิธีที่สอดคล้องกันในการรับรายการวิธีการที่ใช้ได้! (พวกเขามีอยู่อย่างน่าอัศจรรย์และฉันรู้สึกว่าฉันควรจะรู้เกี่ยวกับพวกเขา)
สำหรับตัวอย่างนี้สมมติว่าฉันมีประเภทเนื้อหาที่มีฟิลด์วิดีโอ ฉันต้องได้รับ URL ดิบของไฟล์วิดีโอในฟิลด์นั้น
ดังนั้นฉันจะเริ่มต้นด้วย node id ($ nid) และอย่างใดฉันต้องคิดวิธีการโหลดโหนด สิ่งนี้ไม่เลวร้ายนักเพราะมีตัวอย่างมากมาย $node = \Drupal\node\Entity\Node::load($nid);
ดังนั้นผมจึงทำสิ่งที่ชอบ
จนถึงตอนนี้ดีมาก จากนั้นฉันต้องรับค่าฟิลด์วิดีโอของฉัน (field_main_video) สิ่งนี้ทำให้ฉันตลอดไปที่จะคิดออกเพราะมีเอกสารที่ขัดแย้งรอบ 'สุทธิ ในที่สุดฉันก็พบว่าฉันต้องทำอะไรแบบนี้ (เพราะมันเป็นรายการที่มีหลายค่า):
$video = \Drupal\node\Entity\Node::load($nid)->field_main_video->getValue();
... จากนั้นวนรอบอาร์เรย์เป็นต้นการใช้ kint ไม่ได้ช่วยฉันในการค้นหาสิ่งนี้เช่นกัน เพราะตัวอย่างเช่นถ้าฉันkint($node)
และดูวิธีการฉันไม่เห็น getValue () เป็นรายการที่มี ยังคงไม่น่ากลัวเพราะมีตัวอย่างเพียงพอที่จะคิดออก
ในขณะที่ฉันไปให้ลึกกว่านั้นสิ่งที่ฉันไม่รู้ (นี่คือส่วนสำคัญ) ก็คือแทนที่จะได้รับรหัสเอนทิตีของฟิลด์วิดีโอแล้วโหลดเอนทิตีแล้วค้นหาเอนทิตี "uri" ในเอนทิตี้ ฯลฯ (เช่น ฉันจะเป็น D7): มีวิธีที่ทำให้ฉันได้รับ URI ทั้งหมดในรหัสบรรทัดเดียวกันนี้!
$url = \Drupal\node\Entity\Node::load($nid)->field_main_video->entity->getFileUri();
แต่ฉันจะรู้ได้อย่างไรว่า getFileUri () นี้มีอยู่จริง? ฉันบังเอิญพบมันในโพสต์บล็อก สิ่งนี้ทำให้การได้รับ URI ง่ายกว่าใน D7 ... แต่ถ้าคุณรู้ (อย่างน่าอัศจรรย์) วิธีการที่มีอยู่สำหรับ 'ระดับ' ของแต่ละวัตถุ
ในท้ายที่สุดจากตัวอย่างนี้ฉันถามว่า: คุณจะหาวิธีการสาธารณะทั้งหมดสำหรับแต่ละระดับของวัตถุในวิธีที่ง่ายต่อการอ่านและทำความเข้าใจอย่างไร โปรดทราบว่าดูเหมือนว่าควรมี drupal-centric (เช่นโมดูล devel) ในการทำสิ่งนี้แทนที่จะค้นหาด้วยตนเอง api.drupal.org หรือใช้บางสิ่งบางอย่างที่เฉพาะเจาะจงของ IDE?