Magento 1.9.0.1默认不会将表单键附加到“getDeleteUrl”中,而是为“getAddToCartUr


Magento 1.9.0.1 doesn't append the form key by default inside "getDeleteUrl" but does for "getAddToCartUrl"

当我对 1.9.0.1 进行全新安装并将我的设计文件复制到新安装中时,添加到购物车工作正常,但从购物车中删除产品却没有。

我注意到在核心文件中,getDeleteUrl使用:

public function getDeleteUrl()
{
    if ($this->hasDeleteUrl()) {
        return $this->getData('delete_url');
    }
    return $this->getUrl(
        'checkout/cart/delete',
        array(
            'id'=>$this->getItem()->getId(),
            Mage_Core_Controller_Front_Action::PARAM_NAME_URL_ENCODED => $this->helper('core/url')->getEncodedUrl()
        )
    );
}

getAddToCartUrl 使用:

public function getAddToCartUrl($product, $additional = array())
{
    if (!$product->getTypeInstance(true)->hasRequiredOptions($product)) {
        return $this->helper('checkout/cart')->getAddUrl($product, $additional);
    }
    $additional = array_merge(
        $additional,
        array(Mage_Core_Model_Url::FORM_KEY => $this->_getSingletonModel('core/session')->getFormKey())
    );
    if (!isset($additional['_escape'])) {
        $additional['_escape'] = true;
    }
    if (!isset($additional['_query'])) {
        $additional['_query'] = array();
    }
    $additional['_query']['options'] = 'cart';
    return $this->getProductUrl($product, $additional);
}

如果你从上面的代码中注意到,getDeleteUrl 没有附加表单键,但 getAddToCartUrl 会附加,为什么会这样?

你实际上是在问两个问题,即使你只是在陈述一个问题。

问题 1:为什么删除产品不起作用

假设你正在使用"/checkout/cart/delete/id/2504/uenc/[encoded url key]/",它真的应该工作。请看我对第二个问题的回答。

问题 2:为什么删除链接中没有表单键。

如果你在这里检查,这个更容易:https://github.com/OpenMage/magento-mirror/blob/magento-1.9/app/code/core/Mage/Checkout/controllers/CartController.php#L490在这里: https://github.com/OpenMage/magento-mirror/blob/magento-1.9/app/code/core/Mage/Checkout/Model/Cart.php#L441

删除产品不需要表单键。要么是因为他们认为它不够重要而没有添加它,要么只是被遗忘了。无论如何,删除功能在没有表单键的情况下应该可以正常工作。