Trong Magento 2, $this
biến không còn tham chiếu đến đối tượng khối của mẫu. Nó đề cập đến một lớp mẫu
Magento\Framework\View\TemplateEngine\Php
Tuy nhiên, lớp mẫu này có một __call
phương thức thông qua
#File: vendor/magento/framework/View/TemplateEngine/Php.php
public function __call($method, $args)
{
return call_user_func_array([$this->_currentBlock, $method], $args);
}
Mà đảm bảo bất kỳ cuộc gọi phương thức nào làm cho nó thông qua khối thực tế. Điều này cũng giải thích tại sao bạn không thể gọi các phương thức được bảo vệ từ các phtml
mẫu.
Ngoài ra, mặc dù vậy, mọi mẫu (tôi nghĩ?) Đều có một biến có tên là $block
popated, cũng đề cập đến đối tượng khối cha. Bạn có thể thấy điều này được sử dụng trong mẫu danh sách của Magento
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
trong đó $block
biến được sử dụng, nhưng không bao giờ được xác định rõ ràng.
Khác với sự khác biệt được đề cập ở trên, có sự khác biệt nào giữa việc sử dụng một kỹ thuật này so với kỹ thuật kia không? tức là làm cả hai $block
và $this->currentBlock
đề cập đến cùng một đối tượng?