อย่า
นี่เหมือนกับการใช้ObjectManager::getInstance()->create()
ในเทมเพลต!
ใช้บล็อกที่กำหนดเองที่ได้รับผู้ช่วยเป็นผู้สร้างการอ้างอิงแทนและเพิ่มวิธีการพร็อกซี่ที่เรียกวิธีการช่วยเหลือ
ในเทมเพลต:
$block->customMethod()
ในบล็อก:
public function __construct(Path/To/Helper/Class $helperClass, ...other dependencies...)
{
$this->helper = $helperClass;
// ...other assignments and call to parent::__construct()
}
public function customMethod()
{
return $this->helper->customMethod();
}
ในหลักการของ OOP พูดอย่างนี้เพื่อหลีกเลี่ยงการละเมิด "กฎหมายแห่ง Demeter" มันสรุปตรรกะทางธุรกิจในบล็อกแทนแม่แบบ ในฐานะที่เป็นผลข้างเคียงมันยังทำให้ตรรกะทดสอบได้มากขึ้นเมื่อมีการย้ายตรรกะลงในบล็อก
เกี่ยวกับตรรกะที่ใส่ลงในคลาสของผู้ช่วยเหลือฉันพบว่าในผู้ช่วย Magento 2 ส่วนใหญ่มีเหตุผลสำหรับบริการเช่นสิ่งที่ไม่ใช่แบบจำลอง แต่มีรหัสที่ใช้ซ้ำได้เช่นการจัดรูปแบบราคา (ซึ่งมีอยู่ในแกน แต่ฉันสามารถ ลองนึกถึงตัวอย่างที่ดีกว่าตอนนี้)
di.xml
สำหรับประเภทคลาสบล็อกไม่เก็บโครงร่างบางอย่าง ฉันพยายามยกตัวอย่างเช่นสำหรับคลาส\Magento\Catalog\Block\Product\View\Type\Simple
เทมเพลตdefault.phtml
ที่ใช้ในเทมเพลตของเราถูกละเว้น ไม่มีเงื่อนงำทำไมในขณะนี้