En Magento 2, la $this
variable ya no hace referencia al objeto de bloque de una plantilla. Se refiere a una clase de plantilla.
Magento\Framework\View\TemplateEngine\Php
Sin embargo, esta clase de plantilla tiene un __call
método passthrough
#File: vendor/magento/framework/View/TemplateEngine/Php.php
public function __call($method, $args)
{
return call_user_func_array([$this->_currentBlock, $method], $args);
}
Lo que garantiza que cualquier llamada a un método llegue al bloque real. Esto también explica por qué no puede llamar a métodos protegidos desde phtml
plantillas.
Sin embargo, además de esto, cada plantilla (¿creo?) Tiene una variable denominada $block
poblada, que también se refiere al objeto de bloque principal. Puede ver esto en uso en la plantilla de lista de Magento
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
donde $block
se usa la variable, pero nunca se define explícitamente.
Aparte de las diferencias mencionadas anteriormente, ¿hay alguna diferencia entre usar una técnica sobre la otra? es decir, ¿ambas cosas $block
y se $this->currentBlock
refieren al mismo objeto?