Magento 2では、$this
変数はテンプレートのブロックオブジェクトを参照しなくなりました。テンプレートクラスを参照します
Magento\Framework\View\TemplateEngine\Php
ただし、このテンプレートクラスにはpassthrough __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
populated という名前の変数があり、これは親ブロックオブジェクトも参照します。これはMagentoのリストテンプレートで使用中です。
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
どこ$block
変数が使用されますが、明示的に定義されることはありません。
上記の違い以外に、あるテクニックを他のテクニックと使用することの間に違いはありますか?すなわち、両方を実行し、同じオブジェクト$block
を$this->currentBlock
参照しますか?