【问题标题】:Bypassing overriding actions in controllers绕过控制器中的覆盖操作
【发布时间】:2017-11-02 01:30:28
【问题描述】:

我安装了一些新模块,ajaxcartpro 和 saveforlater。 Saveforlater 在其控制器中调用 addAction() 操作。来自 mage_checkout_controller 的 addAction 被 ajaxcartpro 模块中的那个覆盖。

我想知道是否有一种方法可以专门使用 mage_checkout_controller 中的 addAction 操作而不是 ajaxcartpro 中的操作。

Saveforlater 控制器调用 addAction():

public function moveAction(){
    $saveforlater_item_id = Mage::app()->getRequest()->getParam('item');
    if( $saveforlater_item_id ){
        $saveforlater_item = Mage::getModel('saveforlater/item')->load( $saveforlater_item_id );
        $buy_request = unserialize( $saveforlater_item->getBuyRequest() );
        $params = $this->getRequest()->getParams();
        $this->getRequest()->setParams( $buy_request );
        $this->addAction();
        $saveforlater_item->delete();
    }
}

有什么方法可以改变 $this->addAction();要专门从 mage_checkout_controller 调用 addAction?

【问题讨论】:

    标签: php ajax magento controller


    【解决方案1】:

    是的。如果你的类扩展了Mage_Checkout_CartController,你可以通过parent调用它:

    parent::addAction();
    

    如果你的类没有直接扩展Mage_Checkout_CartController,但仍然是它的一个实例,那么你可以这样直接访问它:

    Mage_Checkout_CartController::addAction();
    

    【讨论】:

    • 谢谢乔,我将如何将 $this 与 that 结合使用?好像没用。
    • 没有必要使用$this。只需将$this->addAction() 替换为我回答中的示例之一即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2013-02-04
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多