อาจง่ายที่สุดในการเริ่มต้นด้วยตัวอย่าง
ดูเหมือนว่าฟังก์ชัน entity_metadata_wrapper() จะใช้เวทมนตร์ที่ซับซ้อนอยู่เบื้องหลังเพื่อส่งคืนวัตถุพร้อมข้อมูลทั้งหมดที่เกี่ยวข้องกับเอนทิตีที่เป็นปัญหา แต่ฉันจะทราบได้อย่างไรว่าคุณสมบัติและเมธอดใดบ้างที่พร้อมใช้งานสำหรับฉันเมื่อส่งคืนออบเจกต์แล้ว
สมมติว่าฉันมี Commerce Order (นี่ไม่จำเป็นต้องเป็นคำถามการค้า แต่เป็นเพียงตัวอย่างที่ดีเท่านั้น) ในการชำระเงิน ฉันต้องการตรวจสอบว่าคำสั่งซื้อมีบรรทัดรายการของประเภทผลิตภัณฑ์ที่กำหนดและแจ้งให้ผู้ใช้ทราบบางทีฉันอาจต้องการเปรียบเทียบราคารายการโฆษณาที่คำนวณได้กับราคาเดิมในประเภทผลิตภัณฑ์ด้วย
ตกลงตามนั้น คำสั่ง, รายการโฆษณา, ประเภทสินค้า, และ ผู้ใช้ ที่เป็นเอนทิตีอ้างอิงทั้งหมด ประเภทผลิตภัณฑ์มีฟิลด์ที่กำหนดเองหลายฟิลด์ ซึ่งอาจเป็นข้อมูลอ้างอิงไปยังเอนทิตีอื่น เช่น ข้อมูลการเรียกเก็บเงิน
$order_wrapper = entity_metadata_wrapper('commerce_order', $คำสั่งซื้อ);
ตามเอกสาร Entity API ตอนนี้เอนทิตีที่อ้างอิงทั้งหมดรวมอยู่ในวัตถุพร้อมให้ฉันใช้ด้วย wrapper
แต่ฉันจะรู้วิธีเข้าถึงค่าที่ฉันกำลังมองหาหรือตำแหน่งใดในโครงสร้างวัตถุได้อย่างไร ฟิลด์ drupal ที่อ้างอิงทั้งหมดเป็นชื่อเครื่องตามการออกแบบหรือไม่ ฉันรู้ว่าการผูกมัดต้องมีส่วน แล้วปัจจัยนั้นเข้ามาเกี่ยวข้องอย่างไร? และโครงสร้างนี้จะไม่เปลี่ยนแปลงทุกครั้งที่มีการเรียก entity_metadata_wrapper เนื่องจากเอนทิตีที่เป็นปัญหาสามารถอ้างอิงเอนทิตีอื่นโดยพลการ (ที่อ้างอิงเอนทิตีอื่น ฯลฯ) และถ้าโครงสร้างเป็นไปตามอำเภอใจ โค้ดใดๆ ที่อาศัยโครงสร้างนั้น ณ เวลาที่กำหนด ถ้ามีการเปลี่ยนแปลง โค้ดนั้นจะไม่ทำลายโค้ดหรือไม่
ในที่สุด ฉันเห็นการอ้างอิงถึงสิ่งต่างๆ เช่น -> บันทึก ()
และ -> ค่า ()
ในเอกสาร Entity API แต่ฉันไม่พบการอ้างอิงถึงชุดวิธีการทั้งหมดที่มีให้ฉัน มีโครงสร้างเชิงตรรกะใด ๆ ในการหาสิ่งนี้หรือฉันต้องใช้บางอย่างเช่น xdebug ทุกครั้ง (และถ้าฉันทำนั่นยังไม่ทำให้ฉันรู้ว่าฉันมีวิธีใดบ้างในการดำเนินการกับข้อมูล) นี่สำหรับ D7 แต่ถ้าคำตอบของ D8+ สามารถเพิ่มความชัดเจนได้ โปรดระบุ