In Magento 2 $this
verweist die Variable nicht mehr auf das Blockobjekt einer Vorlage. Es bezieht sich auf eine Vorlagenklasse
Magento\Framework\View\TemplateEngine\Php
Diese Vorlagenklasse verfügt jedoch über eine Passthrough- __call
Methode
#File: vendor/magento/framework/View/TemplateEngine/Php.php
public function __call($method, $args)
{
return call_user_func_array([$this->_currentBlock, $method], $args);
}
Damit stellen Sie sicher, dass alle Methodenaufrufe den eigentlichen Block erreichen. Dies erklärt auch, warum Sie geschützte Methoden nicht aus phtml
Vorlagen aufrufen können .
Darüber hinaus enthält jede (glaube ich?) Vorlage eine Variable mit dem Namen $block
populated, die sich auch auf das übergeordnete Blockobjekt bezieht. Sie können dies in der Listenvorlage von Magento sehen
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
wo die $block
Variable verwendet wird, aber nie explizit definiert.
Gibt es, abgesehen von den oben genannten Unterschieden, einen Unterschied zwischen der Verwendung einer Technik gegenüber der anderen? dh beides $block
und $this->currentBlock
auf dasselbe Objekt verweisen?