Magento 控制器 url 重定向到仪表板

Magento controller url redirects to dashboard

基本上是在尝试创建一个 "read details" 应该将用户重定向到自定义控制器的收件箱消息时,但是我可以在浏览器中看到所需的 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。

我正在从另一个控制器访问同一个控制器,它按预期运行,实际工作的控制器是一个网格,它看起来像这样:

$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,
));

那么,我是不是漏掉了什么?

顺便说一句,有没有办法让 "read details" link 在同一页面而不是在新标签页中打开?

============================================= =====================

更新

在安全选项中禁用 "Add Secret Key to URLs" 允许我让它工作,但是我想使用密钥。

我在第一个代码块中生成的 URL 实际上在 URL 中有一个 key/value,它们看起来像这样:

https://example.com/index.php/mymodule/Controller/index/id/3963566814/key/f84701848a22d2ef36022accdb2a6a69/

您似乎正在尝试生成管理员 URL。在现代版本的 Magento 中,管理网址 必须 使用 adminhtml 前面的名称,使用 Magento 前面的名称共享 技术(在 this article).那是 must,因为如果你不这样做,URLs 将不起作用。 Magento 删除了在后端创建非 adminhtml URLs 的能力。

其次,这是 Magento 生成密钥的地方

#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);
}

这是它验证密钥的地方

#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 的 pre/post 散列值,看看为什么 Magento 在您的页面上生成了错误的键。