4

この設定で OnepageController を拡張しようとしています:

app/etc/modules/Custom_Checkout.xml

<config>
    <modules>
        <Custom_Checkout>
            <active>true</active>
            <codePool>local</codePool>
        </Custom_Checkout>
    </modules>
</config>

アプリ/ローカル/カスタム/チェックアウト/etc/config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Custom_Checkout>
            <version>0.0.1</version>
        </Custom_Checkout>
    </modules>
    <frontend>
        <routers>
            <checkout>
                <args>
                    <modules>
                        <custom_checkout before="Mage_Checkout">Custom_Checkout</custom_checkout>
                    </modules>
                </args>
            </checkout>
        </routers>
    </frontend>
</config>

アプリ/ローカル/カスタム/チェックアウト/コントローラー/OnepageController.php

require_once("Mage/Checkout/controllers/OnepageController.php");

class Custom_Checkout_OnepageController extends Mage_Checkout_OnepageController
{

    public function indexAction()
    {
    echo "Index overidden";
    }

}

私はこれらを見てきました: Magento コア コントローラーを拡張します (Checkout/OnepageController)

http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/how_to_overload_a_controller

さらに、投稿できないものもありますが、上記の方法はどれも機能していないようです。コントローラーを上書きしないだけです。

これが上書きされない理由についてのアイデアはありますか?

4

2 に答える 2

1

残念ながら、ここには間違っている可能性のあるものが無数にあり、あなたの投稿にはそれらを追跡するのに十分な情報がありません. 答えの代わりに、ここにデバッグのヒントがあります。_validateControllerClassName関数を見てみましょう。

protected function _validateControllerClassName($realModule, $controller)
{
    $controllerFileName = $this->getControllerFileName($realModule, $controller);
    if (!$this->validateControllerFileName($controllerFileName)) {
        return false;
    }

    $controllerClassName = $this->getControllerClassName($realModule, $controller);
    if (!$controllerClassName) {
        return false;
    }

    // include controller file if needed
    if (!$this->_includeControllerClass($controllerFileName, $controllerClassName)) {
        return false;
    }

    return $controllerClassName;
}

それぞれreturn falseが、Magento がリクエストにコントローラー クラスを使用しないことを決定する可能性がある状態です。if ステートメントの内側と外側の両方に, , のロギングまたはvar_dumping を追加してみてください。通常は、ファイル パス名またはクラス (大文字と小文字の区別、文字の欠落など) の小さな間違いを指摘して、モジュールを修正するのに十分です。$controllerFileName$controllerClassName

に関連する情報がまったく表示されない場合はCustom_Checkout、Magento がモジュールを認識できないことを意味し、そのデバッグを開始する必要があります。

于 2013-04-27T22:53:34.267 に答える
0

解決策は正しいケースを持つことだと思います。それ以外の:

<custom_checkout before="Mage_Checkout">Custom_Checkout</custom_checkout>

次のように綴る必要があります。

<Custom_Checkout before="Mage_Checkout">Custom_Checkout</Custom_Checkout>
于 2013-04-27T20:08:22.727 に答える