我在处理 magento 消息时遇到问题。我正在构建自定义模块,理论上应该能够限制对商店某些部分的访问。我创建了一个观察者,它挂接到 controller_action_predispatch
事件并检查用户是否可以访问当前请求。如果无法访问该操作,观察者将重定向用户并设置错误信息。我想将重定向网址设置为客户来自的页面,以避免点击整个商店。我正在查看 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);
我发现有趣的是,如果我在观察者文件中进行任何更改并保存它,那么下一个失败并重定向到引用网址的请求将显示错误信息,但任何后续请求都会丢失消息。
我认为问题出在完整的网址和我的本地安装(我正在使用 .local 域),但所以我尝试添加
$url = str_replace(Mage::getBaseUrl(), '/', $url);
但这并没有帮助。
我还尝试使用 php header()
函数进行重定向,但也没有任何结果。
所有缓存均已禁用。触发该问题的工作流程如下:
- 我将访问任何可访问的页面(例如/customer/account)
- 点击购物车链接(此帐户的购物车已禁用)
- 返回/customer/account并显示错误消息
- 再次点击购物车链接
- 返回/customer/account,但没有错误消息
任何关于在哪里查看的提示将不胜感激。
最佳答案
//A Success Message
Mage::getSingleton('core/session')->addSuccess("Some success message");
//A Error Message
Mage::getSingleton('core/session')->addError("Some error message");
//A Info Message (See link below)
Mage::getSingleton('core/session')->addNotice("This is just a FYI message...");
//These lines are required to get it to work
session_write_close(); //THIS LINE IS VERY IMPORTANT!
$this->_redirect('module/controller/action');
// or
$url = 'path/to/your/page';
$this->_redirectUrl($url);
这将在 Controller 中工作,但如果您在发送输出后尝试重定向,那么您只能通过 javascript 来做到这一点:
<script language=”javascript” type=”text/javascript”>
window.location.href=”module/controller/action/getparam1/value1/etc";
</script>
关于Magento 重定向后丢失消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13251078/