ใน Magento 1 หากคุณต้องการส่งผ่านข้อมูลจากแอ็คชั่นคอนโทรลเลอร์ของคุณไปยัง "มุมมอง" (เช่นบล็อกในเลย์เอาต์ของคุณคุณสามารถทำได้)
เพิ่มค่า / วัตถุให้กับรีจิสตรีส่วนกลางผ่าน
Mage::register
ดึงวัตถุบล็อกโดยตรงและตั้งค่าคุณสมบัติข้อมูลบนวัตถุบล็อกที่ถูกดึงข้อมูลหลังจากเรียกใช้
loadLayout
วิธีการโทรบนบล็อกวัตถุใน
phtml
ไฟล์และให้วัตถุบล็อกใช้เลเยอร์โมเดล / ฐานข้อมูลเพื่ออ่านข้อมูลที่บันทึกไว้ก่อนหน้านี้ในแอคชั่นคอนโทรลเลอร์
การใช้วิธีการบล็อกวัตถุเพื่ออ่านจากฐานข้อมูลยังคงปรากฏว่าทำงานได้ใน Magento 2 - ซึ่งเหมาะสำหรับการใช้งานบางประเภท อย่างไรก็ตาม
ไม่มีการลงทะเบียนระดับโลกใน Magento 2 อีกต่อไป (หรือมีอยู่แล้ว)
ตอนนี้ระบบเลย์เอาต์ทำงานโดยการสร้างวัตถุหน้าผ่านโรงงานและคุณไม่สามารถคว้าการอ้างอิงบล็อกแบบเดียวกับที่คุณทำได้ใน Magento 1
เป็นไปได้ไหมใน Magento 2 ที่จะส่งผ่านข้อมูลโดยตรงจากคอนโทรลเลอร์ลงสู่มุมมอง? หรือนี่เป็นรูปแบบที่ตรงกับโลกแห่ง Design Pattern ™ที่กล้าหาญของวีโอไอพีหรือไม่? หากนี่เป็นรูปแบบที่ตรงเกินไปสิ่งที่ควรทำถ้ามีข้อมูลจากการคำนวณบางอย่างที่เราต้องการแสดงในเทมเพลต แต่ไม่ต้องการเก็บข้อมูลนั้นไว้ในระบบ stateful (เช่นเราไม่ต้องการบันทึกลงใน ฐานข้อมูล)
ฉันสามารถคิดถึงวิธีที่แตกต่างกันเล็กน้อยในการแฮ็คข้อมูลนี้ด้วยตนเอง - แต่ฉันสนใจว่า Magento 2 ต้องการให้คุณทำอย่างไร
หมายเหตุ : ฉันรู้ว่าเป็นไปได้ที่จะดึงข้อมูลอินสแตนซ์บล็อกในแอคชั่นคอนโทรลเลอร์โดยใช้บางสิ่งเช่นนี้
$resultPage = $this->resultPageFactory->create();
$block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js');
var_dump(spl_object_hash($block));
โค้ดหลักของ Magento 2 ทำเช่นนี้บ่อยครั้ง อย่างไรก็ตาม - วัตถุบล็อกที่ดึงมาในวัตถุตัวควบคุมดูเหมือนว่าจะเป็นวัตถุที่แตกต่างจากที่มีอยู่ในphtml
แม่แบบผ่าน$this
หรือ$block
(อดีต ( $this
) ดูเหมือนจะเป็นวัตถุที่จริงทำให้แม่แบบในขณะที่ในภายหลัง ( $block
) ดูเหมือนจะเป็น ตัวอย่างของ Magento Block type)
#File: path/to/template.phtml
var_dump(spl_object_hash($block));
var_dump(spl_object_hash($this));
ฉันพูดว่า "ดูเหมือนจะเป็น" เพราะถ้าฉันตั้งค่าข้อมูลในวิธีการดำเนินการควบคุมจะไม่สามารถใช้ได้ในphtml
แม่แบบ - และถ้าฉันเปรียบเทียบspl_object_hash
ผลลัพธ์ข้างต้นฉันได้รับแฮชสามแบบ อย่างไรก็ตามฉันยังใหม่พอที่ทั้งหมดข้างต้นอาจเป็นข้อผิดพลาดอื่น ๆ ที่ฉันทำ - ดังนั้นหากคุณสามารถตั้งค่าข้อมูลในบล็อกและดึงข้อมูลในแม่แบบฉันชอบที่จะได้ยินเกี่ยวกับมัน !