Dans Magento 2, la $this
variable ne fait plus référence à l'objet bloc d'un modèle. Il fait référence à une classe de modèle
Magento\Framework\View\TemplateEngine\Php
Cependant, cette classe de modèle possède une __call
méthode passthrough
#File: vendor/magento/framework/View/TemplateEngine/Php.php
public function __call($method, $args)
{
return call_user_func_array([$this->_currentBlock, $method], $args);
}
Ce qui garantit que tous les appels de méthode atteignent le bloc réel. Cela explique également pourquoi vous ne pouvez pas appeler des méthodes protégées à partir de phtml
modèles.
En plus de cela, chaque modèle (je pense?) A une variable nommée $block
peuplée, qui fait également référence à l'objet bloc parent. Vous pouvez voir cela en cours d'utilisation dans le modèle de liste de Magento
#File: vendor/magento/module-catalog/view/frontend/templates/product/list.phtml
//...
$_productCollection = $block->getLoadedProductCollection();
où la $block
variable est utilisée, mais jamais explicitement définie.
Outre les différences mentionnées ci-dessus, existe-t-il une différence entre l'utilisation d'une technique par rapport à l'autre? ie Faire les deux $block
et se $this->currentBlock
référer au même objet?