$this
似乎不是导致致命错误的对象。
如果正在调用模板,则$this
必须是类实例;ref Mage_Core_Block_Template::fetchView()
,并从那里追溯。问题是您的代码假定有一个$this
具有别名的子块customerfriends.event.edit
并立即执行对象操作 ( $returnedObject->setData()
)。
您的问题的解决方案取决于确定如何将具有别名的块customerfriends.event.edit
作为子块分配给任何块实例$this
。在 Magento 中,这可以通过布局 XML 以三种方式之一发生:
一:
<reference name="theParentBlock">
<block name="customerfriends.event.edit" ... />
</reference>
二:
<reference name="theParentBlock">
<action method="insert"><block>customerfriends.event.edit</block></action>
</reference>
三:
<block name="customerfriends.event.edit" ... parent="theParentBlock" />
这也可以直接在 PHP 中完成,通常在控制器之后loadLayout()
或类似的调用中。
另外,请注意父块($this
在您的情况下)通过别名“了解”他们的孩子。如果没有指定别名,则使用布局中的块名称作为别名。您可以将布局 XML 中的别名识别为as
属性或操作的第四个参数insert
:
<reference name="theParentBlock">
<block name="customerfriends.event.edit" ... as="theAlias" />
</reference>
和
<reference name="theParentBlock">
<action method="insert">
<block>customerfriends.event.edit</block>
<sibling />
<after />
<alias>theAlias</alias>
</action>
</reference>
您可以通过执行以下操作查看父级的子级列表:
Zend_Debug::dump(array_keys($this->getChild()));