基本上,在尝试创建收件箱消息时,“阅读详细信息”应该将用户重定向到自定义 Controller ,但是我可以在浏览器中看到所需的 url 一秒钟,然后它重定向到仪表板;目前,我正在努力实现这一目标:
$myId = $myJson['id'];
$title = "Title of my notice";
$description = $myJson['text'];
$url= Mage::helper("adminhtml")->getUrl('My_Module/Controller/index', array('id' => $myId));
$sendingMessage = Mage::getModel('adminnotification/inbox')->addNotice($title,$description,$url);
上面的代码成功地将消息添加到收件箱,但是正如我之前所说,在它被重定向到仪表板之前,我可以在浏览器中看到所需的 URL。
我正在从另一个 Controller 访问同一个 Controller ,它按预期进行,实际工作的是一个网格,它看起来像这样:
$this->addColumn('action',
array(
'header' => __('Answer'),
'width' => '100',
'type' => 'action',
'getter' => 'getId',
'actions' => array(
array(
'caption' => __('Answer'),
'url' => array('base'=> '*/Controller'),
'field' => 'id'
)),
'filter' => false,
'sortable' => false,
'index' => 'stores',
'is_system' => true,
));
那么,我在这里遗漏了什么吗?
顺便说一句,有没有办法让“阅读详情”链接在同一页面而不是在新标签页中打开?
============================================= ===================
更新
在安全选项中禁用“将 key 添加到 URL”允许我让它工作,但是我想使用 key 。
我在第一个代码块中生成的 URL 实际上在 URL 中有一个键/值,它们看起来像这样:
https://example.com/index.php/mymodule/Controller/index/id/3963566814/key/f84701848a22d2ef36022accdb2a6a69/
最佳答案
您似乎正在尝试生成管理 URL。在现代版本的 Magento 中,管理 url 必须使用 adminhtml
前面的名称,使用 Magento Front Name Sharing 技术(在 this article 中描述) .这是必须,因为如果您不这样做,URL 将无法工作。 Magento 删除了在后端创建非 adminhtml URL 的功能。
其次,这是 Magento 生成 key 的地方
#File: app/code/core/Mage/Adminhtml/Model/Url.php
public function getSecretKey($controller = null, $action = null)
{
$salt = Mage::getSingleton('core/session')->getFormKey();
$p = explode('/', trim($this->getRequest()->getOriginalPathInfo(), '/'));
if (!$controller) {
$controller = !empty($p[1]) ? $p[1] : $this->getRequest()->getControllerName();
}
if (!$action) {
$action = !empty($p[2]) ? $p[2] : $this->getRequest()->getActionName();
}
$secret = $controller . $action . $salt;
return Mage::helper('core')->getHash($secret);
}
这是它验证 key 的地方
#File: app/code/core/Mage/Adminhtml/Controller/Action.php
protected function _validateSecretKey()
{
if (is_array($this->_publicActions) && in_array($this->getRequest()->getActionName(), $this->_publicActions)) {
return true;
}
if (!($secretKey = $this->getRequest()->getParam(Mage_Adminhtml_Model_Url::SECRET_KEY_PARAM_NAME, null))
|| $secretKey != Mage::getSingleton('adminhtml/url')->getSecretKey()) {
return false;
}
return true;
}
比较 $secret
的前/后哈希值,看看为什么 Magento 在您的页面上生成了不正确的 key 。
关于Magento Controller url 重定向到仪表板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35801353/