在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
答案 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/type
或customer/captcha/type
的配置值,而这两种情况都不会在core_config_data
表格中找到数据库。这些实际上是在app/code/core/Mage/Captcha/etc/config.xml
中设置的。