在magento中找不到已定义的块
我将按照本教程创建简单报告模块。我已经准备好了所有的代码和XML,但是我收到了这个错误在magento中找不到已定义的块,magento,Magento,我将按照本教程创建简单报告模块。我已经准备好了所有的代码和XML,但是我收到了这个错误 2012-05-31T21:48:43+00:00 ERR (3): Recoverable Error: Argument 1 passed to Mage_Adminhtml_Controller_Action::_addContent() must be an instance of Mage_Core_Block_Abstract, boolean given, called in /var/www/
2012-05-31T21:48:43+00:00 ERR (3): Recoverable Error: Argument 1 passed to Mage_Adminhtml_Controller_Action::_addContent() must be an instance of Mage_Core_Block_Abstract, boolean given, called in /var/www/magento/app/code/local/Super/Awesome/controllers/Adminhtml/Report/ExampleController.php on line 22 and defined in /var/www/magento/app/code/core/Mage/Adminhtml/Controller/Action.php on line 112
结构看起来像这样
Super
|_ Awesome
|_Block
| |_Adminhtml
| |_Report
| |_Simple
| | |_Grid.php
| |_Simple.php
|_controllers
| |_Adminhtml
| |_Report
| |_ExampleController.php
|_etc
| |_adminhtml.xml
| |_config.xml
|_Helper
| |_Data.php
|_Model
|_Mysql4
| |_Report
| | |_Simple
| | |_Collection.php
| |_Simple.php
|_Simple.php
我假设它没有找到块代码,但为什么
编辑
您的
config.xml
缺少一些关键信息,即告诉Magento在哪里查找块的
部分。我不知道为什么这会隐藏在教程的“复杂”部分,但是哦,好吧。这应该可以做到:
<config>
...
<global>
...
<blocks>
<awesome>
<class>Super_Awesome_Block</class>
</awesome>
</blocks>
...
...
...
超级超级超级街区
...
您的config.xml
缺少一些关键信息,即告诉Magento在哪里查找块的
部分。我不知道为什么这会隐藏在教程的“复杂”部分,但是哦,好吧。这应该可以做到:
<config>
...
<global>
...
<blocks>
<awesome>
<class>Super_Awesome_Block</class>
</awesome>
</blocks>
...
...
...
超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级超级街区
...
当您(或Magento)使用以下代码时
$this->getLayout()->createBlock('awesome/adminhtml_report_simple')
你是说
请从awesome
组中创建一个adminhtml\u报告\u simple
块
Magento需要知道类的基本名称,以便用于来自awesome组的块。如果您不告诉Magento类的基本名称用于awesome组中的块,它就无法实例化块。这就是为什么对方法的调用会返回false
,而不是返回块对象,这就是为什么会出现异常
您需要通过向配置中添加节来“打开”模块的块。基于上面的示例,您已经为helper类做了类似的事情
<config>
<global>
<helpers>
<awesome>
<class>Super_Awesome_Helper</class>
</awesome>
</helpers>
</global>
</config>
超级超级超级帮手
这就是模块可以使用帮助器类的原因。您只需要对块类执行相同的操作
<config>
<global>
<blocks>
<awesome>
<class>Super_Awesome_Helper</class>
</awesome>
</blocks>
</global>
</config>
超级超级超级帮手
这和缓存清除应该会让你恢复正常。如果它不工作,则跟踪createBlock
,以确定它在blocks/awesome
节点的配置中的位置。这通常足以让我注意到两个小时来我一直在做的错字 当您(或Magento)使用以下代码时
$this->getLayout()->createBlock('awesome/adminhtml_report_simple')
你是说
请从awesome
组中创建一个adminhtml\u报告\u simple
块
Magento需要知道类的基本名称,以便用于来自awesome组的块。如果您不告诉Magento类的基本名称用于awesome组中的块,它就无法实例化块。这就是为什么对方法的调用会返回false
,而不是返回块对象,这就是为什么会出现异常
您需要通过向配置中添加节来“打开”模块的块。基于上面的示例,您已经为helper类做了类似的事情
<config>
<global>
<helpers>
<awesome>
<class>Super_Awesome_Helper</class>
</awesome>
</helpers>
</global>
</config>
超级超级超级帮手
这就是模块可以使用帮助器类的原因。您只需要对块类执行相同的操作
<config>
<global>
<blocks>
<awesome>
<class>Super_Awesome_Helper</class>
</awesome>
</blocks>
</global>
</config>
超级超级超级帮手
这和缓存清除应该会让你恢复正常。如果它不工作,则跟踪
createBlock
,以确定它在blocks/awesome
节点的配置中的位置。这通常足以让我注意到两个小时来我一直在做的错字 刚得到这个错误,但解决方案不同
所有内容都声明正确,因为索引页的调用方式相同,使用
$this->getLayout()->createBlock('')
我看得很清楚
但在我出错的页面上,块返回了false。正如艾伦所建议的,我在Mage\u Core\u Model\u Layout::createBlock()
中四处搜索。我在看函数,然后做了这个
public function createBlock($type, $name='', array $attributes = array())
{
echo $name; // ADDED ECHO HERE
try {
$block = $this->_getBlockInstance($type, $attributes);
} catch (Exception $e) {
echo $e; // ADDED ECHO HERE
Mage::logException($e);
return false;
}
try中有一个错误,因此返回false,因此显示的错误,必须是Mage_Core_Block_Abstract的一个实例,给定布尔值
。实际错误的回音显示我的块中有错误,调用了未声明的变量。它位于一个新的/编辑表单上,因此如果它是一个新项目,则变量不存在。我检查并修复了出现的错误,直到页面加载时没有错误
希望这对有类似问题的人有所帮助,试图在声明中找到实际上不存在的拼写错误,我知道我这样做了一段时间。刚刚出现了这个错误,但解决方案不同 所有内容都声明正确,因为索引页的调用方式相同,使用
$this->getLayout()->createBlock('')
我看得很清楚
但在我出错的页面上,块返回了false。正如艾伦所建议的,我在Mage\u Core\u Model\u Layout::createBlock()
中四处搜索。我在看函数,然后做了这个
public function createBlock($type, $name='', array $attributes = array())
{
echo $name; // ADDED ECHO HERE
try {
$block = $this->_getBlockInstance($type, $attributes);
} catch (Exception $e) {
echo $e; // ADDED ECHO HERE
Mage::logException($e);
return false;
}
try中有一个错误,因此返回false,因此显示的错误,必须是Mage_Core_Block_Abstract的一个实例,给定布尔值
。实际错误的回音显示我的块中有错误,调用了未声明的变量。它位于一个新的/编辑表单上,因此如果它是一个新项目,则变量不存在。我检查并修复了出现的错误,直到页面加载时没有错误
希望这对有类似问题的人有所帮助,试图在声明中找到一个实际上不存在的拼写错误,我知道我这样做了一段时间。好的,我在这里发布我的经验是为了帮助其他人 RYAN的回答非常有用,并指导我找到模块的bug并修复它 自定义一个网格模块时,我遇到了一个类似的错误:
Recoverable Error: Argument 1 passed to Mage_Adminhtml_Controller_Action::
_addContent() must be an instance of Mage_Core_Block_Abstract, boolean given,
called in /var/www/html/magento2/app/c.....
它是