当我点击这个 url 上的模块时http://localhost/xxx/index.php/TradeEnquiry我收到这个错误
致命错误:调用成员函数
setFormAction() 对非对象进行
C:\wamp\www\stockdisplays\app\code\local\Stock\Tradeenquiry\controllers\IndexController.php
55号线
第55行是这样的:
$this->getLayout()->getBlock('tradeenquiryView')
->setFormAction( Mage::getUrl('*/*/post') );
这是我的布局 xml 中的一个片段:
<default>
<reference name="footer_links">
<action method="addLink" translate="label title" module="tradeenquiry">
<label>Trade Enquiry</label>
<url>tradeenquiry</url>
<title>Trade Enquiry</title>
<prepare>true</prepare>
</action>
</reference>
</default>
<tradeenquiry_index_index>
<reference name="root">
<action method="setTemplate"><template>page/2columns-right.phtml</template></action>
<action method="setHeaderTitle" translate="title" module="tradeenquiry"><title>Trade Enquiry</title></action>
</reference>
<reference name="content">
<block type="core/template" name="tradeenquiryView" template="tradeenquiry/view.phtml"/>
</reference>
</tradeenquiry_index_index>
我不明白问题是什么?该块正确命名为“tradeenquiryView”。我唯一能想到的是布局xml以某种方式被缓存?因为我必须点击 /TradeEnquiry 上的模块,而不是像我在布局 xml 中所述的 /tradeenquiry 上的模块,所以它几乎就像使用旧版本一样?
就像 Magento 的所有事情一样,发生这种情况的原因有很多。
首先,在命名块时我会避免使用大写字母“V”。虽然我不think这会导致问题(因为名称是对 URI(core/textlist 等)和模板文件路径(/path/to/template.phtml)的引用),小写/下划线的布局系统中有一个事实上的命名约定某人、某个地方(即 Varien)可能认为是强制约定的名称。
第二,你打过电话吗?
$this->loadLayout();
在您尝试设置表单操作的行之前的控制器操作中?在您执行此操作之前,您的布局对象将不会实例化和/或引用您的块对象,这意味着
$this->getLayout()->getBlock('...')
总是会返回 false。
其他调试技巧。请尝试以下操作,以确保您能够恢复您认为应该参加的课程。
die(get_class($this->getLayout()->getBlock('root')));
die(get_class($this->getLayout()));
最后,如果这一切都失败,请转到布局对象的源
app/code/core/Mage/Core/Model/Layout.php
并看一下 getBlock 方法
public function getBlock($name)
{
if (isset($this->_blocks[$name])) {
return $this->_blocks[$name];
} else {
return false;
}
}
并开始抛出调试语句,看看您是否可以找出系统不返回对您的块的引用的原因。不要忘记删除/不签入调试语句,因为这是核心系统代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)