0

これらは 2 つのファイルです:

  1. アプリ/コード/コア/メイジ/モジュール/コントローラー/SubscriberController.php
  2. アプリ/コード/ローカル/MageNS/モジュール/コントローラー/SubscriberController.php

ファイル番号(1)をオーバーライドしようとしていますが、結果はありません。次のコードがあります:

アプリ/コード/ローカル/MageNS/ニュースレター/etc/config.xml

    <?xml version="1.0"?>
<config>
    <modules>
        <MageNS_Newsletter>
            <version>0.0.1</version>
        </MageNS_Newsletter>
    </modules>
    <global>
        <controllers>
            <Mage_Newsletter>
                <rewrite>
                    <account>MageNS_Newsletter_Controllers_SubscriberController</account>
                </rewrite>
            </Mage_Newsletter>
        </controllers>
    </global>
</config> 

およびapp/code/local/MageNS/Module/controllers/SubscriberController.php

    require_once("Mage/Newsletter/controllers/SubscriberController.php");
class MageNS_Newsletter_SubscriberController extends Mage_Newsletter_SubscriberController
{  
    public function test{
        echo "HYLlkpkdpwqkdpqkdqpkdqpkdpqkd";die;
    }
}
4

1 に答える 1

1

アクション コントローラーは、Magento の他のメイン クラス タイプ (ブロック、ヘルパー、およびモデル) とは異なる方法でインスタンス化および解決されます。

  1. 構成 XML による書き換えは可能ですが、異なるメカニズムと規則を使用します。
  2. 意図PSR-0的な設計により、Magento のコントローラー クラスでは自動ローディングのような機能は機能しません。

上書きされたモジュールの frontName の下に別のモジュールのcontrollersディレクトリを追加する必要があります。

<frontend><!-- match to original module config -->
    <routers>
        <newsletter><!-- match to original module config-->
            <args>
                <modules>
                    <MageNS before="Mage_Newsletter">MageNS_Module</MageNS>
                    <!--
                        The above points to app/code/[codePool]/MageNS/Module/controllers/
                        If the value were MageNS_Module_Rewrites then controller matching
                        would begin in app/code/[codePool]/MageNS/Module/controllers/Rewrites/
                    -->
                </modules>
            </args>
        </newsletter>
    </routers>
</frontend>

調べてみると、[このノードが評価されて、指定されたディレクトリが元のモジュールのコントローラMage_Core_Controller_Varien_Router_Standard::collectRoutes()ディレクトリの前にある一致するディレクトリのリストに追加されていることがわかります。

追加の注意: 重要ではありませんが、親クラス定義の最も理想的なインクルード構文は次のとおりです。

include Mage::getModuleDir('controllers','Mage_Newsletter').DS.'SubscriberController.php';
class MageNS_Newsletter_SubscriberController extends Mage_Newsletter_SubscriberController
{  
    //Only methods ending in 'Action' can be invoked directly via HTTP request
    // -------------------v
    public function testAction
    {
        $this->getResponse()->setBody("HYLlkpkdpwqkdpqkdqpkdqpkdpqkd");
    }
}
于 2013-06-25T12:54:11.950 に答える