我对 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);
但这并没有帮助。
我也尝试使用 phpheader()
函数进行重定向,但没有任何结果。
所有缓存都被禁用。触发问题的工作流程如下:
- 我要去任何可访问的页面(例如 /customer/account)
- 单击购物车链接(此帐户的购物车已禁用)
- 返回 /customer/account 显示错误信息
- 再次点击购物车链接
- 返回 /customer/account 但没有错误消息
任何关于在哪里看的提示将不胜感激。