最模板 - 外贸网站建设,外贸网站模板

最模板

当前位置: 首页 > Magento > Magento教程 >

Magento升级之后客户重置密码失败的一个案例

时间:2014-08-21 20:35来源:未知 作者:最模板zuimoban 点击:
一个Magento1.4升级1.7的项目中,系统管理员反映客户在重置密码时出现问题,系统显示了一个致命错误,如下所示。很明显,在AccountController控制器文件中,在一个未定义对象上调用了
一个Magento 1.4升级1.7的项目中,系统管理员反映客户在重置密码时出现问题,系统显示了一个致命错误,如下所示。很明显,在AccountController控制器文件中,在一个未定义对象上调用了setCustomerId()方法。
 
Fatal error: Call to a member function setCustomerId() on a non-object in /var/www/websites/jivity/app/code/core/Mage/Customer/controllers/AccountController.php on line xxx
根据这个错误提示,先是找到该控制器文件调用setCustomerId()方法具体位置,看到了如下的代码片段。可以发现,该方法是实例化一个resetpassword的block类之后调用的。通过提示,我们可以大概判断,问题就出现在该Block类的实例化上。很有可能该类根本就不存在了。
 
 
 
public function resetPasswordAction()
{
    ...
    $this->getLayout()->getBlock('resetPassword')
        ->setCustomerId($customerId)
        ->setResetPasswordLinkToken($resetPasswordLinkToken);
    ...
}
既然这里调用了block,系统肯定在layout文件中有相关定义,然而非常有意思的是,在Magento 1.4版本Customer的布局文件中,根本就不存在customer_account_resetpassword句柄。这意味这Magento 1.7版本重置密码添加了一个全新的页面来实现的。那么,只需要将1.7版本中该句柄的内容复制到1.4版本即可修复该bug。即将如下内容,复制到app/design/frontend/default/当前使用模板/layout/customer.xml里即可。
 
 
 
<customer_account_resetpassword translate="label">
    <label>Reset a Password</label>
    <remove name="right"/>
    <remove name="left"/>
 
    <reference name="head">
        <action method="setTitle" translate="title" module="customer">
            <title>Reset a Password</title>
        </action>
    </reference>
    <reference name="root">
        <action method="setTemplate">
            <template>page/1column.phtml</template>
        </action>
        <action method="setHeaderTitle" translate="title" module="customer">
            <title>Reset a Password</title>
        </action>
    </reference>
    <reference name="content">
        <block type="customer/account_resetpassword" name="resetPassword" template="customer/form/resetforgottenpassword.phtml"/>
    </reference>
</customer_account_resetpassword>
 
(责任编辑:最模板)
------分隔线----------------------------
栏目列表
推荐内容