In Magento 2, la $this
variabile non fa più riferimento all'oggetto blocco di un modello. Si riferisce a una classe modello
Magento\Framework\View\TemplateEngine\Php
Tuttavia, questa classe di modelli ha un __call
metodo passthrough
#File: vendor/magento/framework/View/TemplateEngine/Php.php
public function __call($method, $args)
{
return call_user_func_array([$this->_currentBlock, $method], $args);
}
Che assicurano che qualsiasi chiamata di metodo arrivi al blocco effettivo. Questo spiega anche perché non è possibile chiamare metodi protetti da phtml
modelli.
Oltre a ciò, tuttavia, ogni modello (penso?) Ha una variabile denominata $block
popolata, che si riferisce anche all'oggetto blocco padre. Puoi vederlo in uso nel modello di elenco di Magento
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
dove $block
viene utilizzata la variabile, ma mai definita esplicitamente.
Oltre alle differenze sopra menzionate, c'è qualche differenza tra l'uso di una tecnica rispetto all'altra? cioè fare entrambi $block
e $this->currentBlock
fare riferimento allo stesso oggetto?