Magento 2: Warum generiert mein benutzerdefinierter Controller einen Interceptor?

7

Ich habe kürzlich eine grundlegende Routing-Konfiguration für ein Testmodul erstellt

<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>

und dann eine Controller-Datei bei erstellt

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

Alles funktioniert wie erwartet - aber ich war überrascht zu entdecken, dass Magento automatisch einen Interceptor für meinen neuen Controller erstellt hatte.

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

Ich habe keine Plugins für meinen Controller konfiguriert - daher bin ich wenig verwirrt darüber, warum Magento einen Interceptor generiert hat.

Wodurch erstellt Magento 2 automatisch einen Interceptor für neue Controller?

Alan Storm
quelle

Antworten:

5

Plugins werden auf der Schnittstelle definiert. Wenn Sie also ein Plugin für eine konkrete Schnittstelle definieren

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

Dann arbeitet das Plugin an allen Klassen, die es implementieren, und die IT generiert Interceptor-Proxys für sie. Aus diesem Grund erstellt Magento 2 automatisch einen Interceptor für Ihren Controller (der Magento \ Framework \ App \ ActionInterface implementiert).

KAndy
quelle
Vielen Dank! Kurze Frage - wo sehen Sie die <type/>Definition für Magento\Framework\App\ActionInterface- so etwas taucht in meiner Installation nicht auf (oder zumindest konnte ich es mit grep / ack nicht finden)
Alan Storm
Entschuldigung für die späte Antwort. In Magento / Backend / etc / adminhtml / di.xml haben wir <type name = "Magento \ Framework \ App \ Action \ Action"> <plugin name = "storeCheck" disabled = "true" /> </ type>
KAndy