magento后端无法登录致命错误getBlockName

时间:2014-08-26 03:58:10

标签: magento

在Magento 1.8上运行

我正在复制到测试生产站点,但在后端我无法登录,这是错误消息。

Fatal error: Call to a member function getBlockName() on a non-object in /var/www/test/app/code/core/Mage/Captcha/Block/Captcha.php on line 43

要解决此问题,我们通常会删除var/cache文件夹,但问题是在此测试网站上我们没有var文件夹,因此我不确定导致错误的原因。< / p>

以下是link

2 个答案:

答案 0 :(得分:1)

看起来您的代码假定存在一个块类,并使用该类的实例,然后调用函数getBlockName()

class Mage_Captcha_Block_Captcha extends Mage_Core_Block_Template
{
    /**
     * Renders captcha HTML (if required)
     *
     * @return string
     */
    protected function _toHtml()
    {
        $blockPath =     Mage::helper('captcha')->getCaptcha($this->getFormId())->getBlockName();

是创建问题的代码。

如果你看一下这行:getCaptcha($this->getFormId())

这应该返回一个块实例但由于某种原因它没有。

因此,您需要检查Magento日志并调试getCaptcha($this->getFormId())未生成块的原因。

答案 1 :(得分:1)

对我来说,问题是Mage::helper('captcha')->getCaptcha($this->getFormId())没有像它应该的那样返回一个类。事实证明,app/code/core/Mage/Captcha/Helper/Data.php方法getCaptcha未返回模型,因为$this->getConfigNode('type')正在返回NULL。事实证明这是我的缓存问题。我们在var/cache和Redis中同时使用文件缓存。一旦我清除了所有缓存,这个问题就消失了。

顺便说一下,$this->getConfigNode('type')会尝试获取admin/captcha/typecustomer/captcha/type的配置值,而这两种情况都不会在core_config_data表格中找到数据库。这些实际上是在app/code/core/Mage/Captcha/etc/config.xml中设置的。