เทมเพลต Magento 2: ใช้ `$ block` หรือ` $ this`?
ใน Magento 2 $thisตัวแปรจะไม่อ้างอิงไปยังวัตถุบล็อกของเทมเพลตอีกต่อไป มันหมายถึงคลาสแม่แบบ Magento\Framework\View\TemplateEngine\Php อย่างไรก็ตามคลาสเทมเพลตนี้มี__callวิธีการส่งผ่าน #File: vendor/magento/framework/View/TemplateEngine/Php.php public function __call($method, $args) { return call_user_func_array([$this->_currentBlock, $method], $args); } ซึ่งทำให้แน่ใจว่าการเรียกใช้เมธอดทำให้ผ่านไปยังบล็อกจริง สิ่งนี้ยังอธิบายว่าทำไมคุณไม่สามารถเรียกวิธีการป้องกันจากphtmlแม่แบบ นอกจากนี้แม้ว่าทุกแม่แบบ (ฉันคิดว่า?) มีตัวแปรชื่อ$blockเติมซึ่งยังหมายถึงวัตถุบล็อกผู้ปกครอง คุณสามารถดูสิ่งนี้ได้ในแม่แบบรายการของ Magento #File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml //... $_productCollection = $block->getLoadedProductCollection(); ที่ใช้$blockตัวแปร แต่ไม่เคยกำหนดไว้อย่างชัดเจน นอกเหนือจากความแตกต่างที่กล่าวถึงข้างต้นมีความแตกต่างระหว่างการใช้เทคนิคหนึ่งกับอีกเทคนิคหนึ่งหรือไม่? คือทำทั้งสองอย่าง$blockและ$this->currentBlockอ้างถึงวัตถุเดียวกันหรือไม่?