【发布时间】:2012-11-06 12:28:53
【问题描述】:
我对 magento 消息有疑问。我正在构建自定义模块,理论上应该能够限制对商店某些部分的访问。我创建了一个观察者,它挂钩controller_action_predispatch 事件并检查用户是否可以访问当前请求。如果无法访问该操作,则观察者重定向用户并设置错误信息。我想将重定向 url 设置为客户来自的页面,以避免点击整个商店。我正在查看HTTP_REFERER 并在设置时使用它,否则我会将客户重定向到主页。问题是在后一种情况下(主页重定向)一切正常,但是当我根据引用者设置 url 时,我在消息框中看不到错误消息。
来自观察者的代码($name 变量是一个字符串):
Mage::getSingleton('core/session')->addError('Acces to '.$name.' section is denied');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getResponse()->setRedirect($url);
我发现有趣的是,如果我对观察者文件进行任何更改并保存它,那么下一个失败并被重定向到引用 url 的请求会显示错误信息,但任何后续都会丢失消息。
我认为问题出在完整的 url 和我的本地安装(我正在使用 .local 域)中,但我尝试添加
$url = str_replace(Mage::getBaseUrl(), '/', $url);
但这没有帮助。
我也尝试使用 php header() 函数进行重定向,但没有任何结果。
所有缓存都被禁用。触发问题的工作流程如下:
- 我将转到任何可访问的页面(例如 /customer/account)
- 点击购物车链接(此帐户的购物车已禁用)
- 返回/customer/account,出现错误提示
- 再次点击购物车链接
- 返回 /customer/account 但没有错误消息
任何关于在哪里寻找的提示将不胜感激。
【问题讨论】:
-
你可以停用所有缓存(如果是 magento EE,则 + FPC)看看是否是缓存问题?顺便说一句,我不明白你所有的解释,你明白会话错误消息在第一次显示后被删除?
-
我扩展了描述,希望现在清楚了。
标签: magento