Php Magento重定向循环-购物车控制器溢出

Php Magento重定向循环-购物车控制器溢出,php,magento,http-redirect,Php,Magento,Http Redirect,我创建了一个模块,将折扣代码添加到客户购物车中。如果客户是新客户或在过去24小时内未订购,则该模块适用于为其员工提供午餐的公司,并且他们每天收到一个子公司,以使用3.00英镑 因此,我: app/code/local/Brave/Subsidary/controllers/cartcontroller.php <?php require_once Mage::getModuleDir('controllers', 'Mage_Checkout').DS.'CartController.p

我创建了一个模块,将折扣代码添加到客户购物车中。如果客户是新客户或在过去24小时内未订购,则该模块适用于为其员工提供午餐的公司,并且他们每天收到一个子公司,以使用3.00英镑

因此,我:

app/code/local/Brave/Subsidary/controllers/cartcontroller.php

<?php

require_once Mage::getModuleDir('controllers', 'Mage_Checkout').DS.'CartController.php';

class Brave_Subsidary_CartController extends Mage_Checkout_CartController {

    const DISCOUNTCODE = 'BCOMSTAFF';

    public function addAction() {
        parent::addAction();
        $this->autoApplySubsidaryDiscount();
    }

    public function indexAction() {
        parent::addAction();
        $this->autoApplySubsidaryDiscount();
    }

    public function autoApplySubsidaryDiscount() {

        $customer = Mage::getSingleton('customer/session')->getCustomer();
        $orders = Mage::getResourceModel('sales/order_collection')
        ->addFieldToSelect('*')
        ->addFieldToFilter('customer_id', $customer->getId()); 

        if(!$orders->getSize()) {

            // New Customer...     
            $this->applyDiscountCoupon();

        } else {

            // Check last order date
            $orderCollection = Mage::getModel('sales/order')->getCollection()
            ->addFilter('customer_id', $customer->getId())
            ->setOrder('created_at', Varien_Data_Collection_Db::SORT_ORDER_DESC);

            $newestOrder = $orderCollection->getFirstItem();

            $dateToday = Mage::getModel('core/date')->timestamp(time());
            $lastOrderDate = Mage::getModel('core/date')->timestamp(strtotime($newestOrder->getData('created_at')));

            // only apply if last order was more than 24hrs ago..
            if( $dateToday > $lastOrderDate ) {

                $this->applyDiscountCoupon();   

            }

        }

    }

    public function applyDiscountCoupon() {
        Mage::getSingleton("checkout/session")->setData("coupon_code",self::DISCOUNTCODE);
        Mage::getSingleton('checkout/cart')->getQuote()->setCouponCode(self::DISCOUNTCODE)->save();     
    }

}
?> 

app/code/local/Brave/Subsidary/etc/config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Brave_Subsidary>
            <version>0.1.0</version>
        </Brave_Subsidary>
    </modules>
    <frontend>
        <routers>
            <checkout>
                <use>standard</use>
                <args>
                    <modules>
                        <Brave_Subsidary before="Mage_Checkout">Brave_Subsidary</Brave_Subsidary>
                    </modules>
                </args>
            </checkout>
        </routers>
    </frontend>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Brave_Subsidary>
            <active>true</active>
            <codePool>local</codePool>
        </Brave_Subsidary>
    </modules>
</config> 

0.1.0
标准
勇敢的下属
然后我的模块文件: app/etc/modules/Brave_Subsidary.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Brave_Subsidary>
            <version>0.1.0</version>
        </Brave_Subsidary>
    </modules>
    <frontend>
        <routers>
            <checkout>
                <use>standard</use>
                <args>
                    <modules>
                        <Brave_Subsidary before="Mage_Checkout">Brave_Subsidary</Brave_Subsidary>
                    </modules>
                </args>
            </checkout>
        </routers>
    </frontend>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Brave_Subsidary>
            <active>true</active>
            <codePool>local</codePool>
        </Brave_Subsidary>
    </modules>
</config> 

真的
地方的
问题是,我在购物车页面上得到了一个重定向循环,或者在购物车中添加了一个项目,这可能是一个非常简单的问题,但是试图用谷歌搜索任何相关的东西,这真是大海捞针

FireFox告诉我的错误是:

Firefox检测到服务器正在以一种永远无法完成的方式重定向对此地址的请求。

问题是:

您正在调用parent:addAction(),它重定向回indexAction,indexAction是您的indexAction,它再次调用parent:addAction…因此重定向循环

错误代码:

   public function indexAction() {
        parent::addAction();
        $this->autoApplySubsidaryDiscount();
    }
您不能在上面看到的自定义索引中调用addAction

解决方案:

  • 除去

    公共函数索引(){ 父::addAction(); $this->autoApplySubsidaryDiscount(); }

  • 改变

    公共函数addAction(){ $this->autoApplySubsidaryDiscount(); 父::addAction();
    }

  • 完成了


    但更好的方法是使用观察者来重写控制器……但我猜这是另一个线程:)

    我可以确认折扣代码是否正确应用,因为当我禁用模块时,折扣代码显示为已应用。非常感谢,我是否可以补充一点,indexAction也需要存在,但只需将其更改为:公共函数indexAction(){$this->autoApplySubsidaryDiscount();parent::indexAction();}