要了解两者之间的区别<arguments>
,<action>
您必须了解Magento 2对象的构造函数如何工作。如果您在Magento中重写构造函数,则始终会得到$data-parameter
一个数组。这是在XML文件中提供,并且翻译成内部数据$_data-array
的\Magento\Framework\DataObject
:
<referenceBlock name="catalog.topnav">
<arguments>
<argument name="template" xsi:type="string">Foo_Bar::buzz.phtml</argument>
</arguments>
</referenceBlock>
...
public function __construct(array $data = [])
{
// $_data is populated with the arguments from XML:
// so $_data['template'] is now 'Foo_Bar::buzz.phtml'
$this->_data = $data;
}
但是,在模板的情况下,如果setTemplate()
在伪构造函数(_construct()
,单个下划线)中使用,则意味着$data
无论xml中是否设置了,都将覆盖。
public function _construct()
{
$this->setTemplate('foo/bar.phtml');
}
在这种情况下,<action>
首选,因为这是在构造函数和伪构造函数之后执行的。
<referenceBlock name="catalog.topnav">
<action method="setTemplate">
<argument name="template" xsi:type="string">Foo_Bar::buzz.phtml</argument>
</action>
</referenceBlock>