Magento 2:カスタムコントローラーがインターセプターを生成するのはなぜですか?


7

最近、テストモジュールの基本的なルーティング構成を作成しました

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
    <router id="standard">
        <route id="helloworld" frontName="helloworld">
            <module name="Pulsestorm_Helloworld" />
        </route>
    </router>    
</config>

でコントローラファイルを作成しました

app/code/Pulsestorm/Helloworld/Controller/Index/Index.php

すべてが期待どおりに動作しますが、Magentoが新しいコントローラーのインターセプターを自動的に作成したことを知って驚きました。

var/generation/Pulsestorm/Helloworld/Controller/Index/Index/Interceptor.php

コントローラーのプラグインを構成しなかったため、Magentoがインターセプターを生成した理由について少し混乱しました。

Magento 2が新しいコントローラーのインターセプターを自動的に作成するのはなぜですか?

回答:


5

プラグインはインターフェースで定義されます。したがって、具体的なインターフェースのプラグインを定義した場合

<type name="Magento\Framework\App\ActionInterface">
    <plugin name="log" type="Magento\Logging\App\Action\Plugin\Log" sortOrder="95"/>
</type>

その後、プラグインはそれを実装するすべてのクラスで機能し、ITはそれらのインターセプタープロキシを生成します。これが、Magento 2がコントローラーのインターセプターを自動的に作成する理由です(Magento \ Framework \ App \ ActionInterfaceを実装しています)。


ありがとうございました!簡単な質問-どこで<type/>定義を見ているのか- Magento\Framework\App\ActionInterface私のインストールではそのようなことは表示されません(または、少なくとも、grep / ackでそれを見つけることができませんでした)
Alan Storm

回答が遅れ申し訳ございません。Magento / Backend / etc / adminhtml / di.xmlには、<type name = "Magento \ Framework \ App \ Action \ Action"> <plugin name = "storeCheck" disabled = "true" /> </ type>
KAndyがあります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.