Frage

Ich habe eine di.xml, die ungefähr so ​​aussieht

<config>
<type name="Psr\Log\LoggerInterface">                
    <plugin name="namespace_modulename_plugins_psr"
            type="Namespace\Modulename\Plugins\Psr"
            sortOrder="10"
            disabled="false"/>     
</type>
</config>

Der Namespace\Modulename\Plugins\Psr Klasse kann instanziiert werden und verfügt über eine beforeInfo Methode definiert

public function beforeInfo($subject)
{
    var_dump(__METHOD__);
    exit;
}

Wenn ich jedoch einen Logger injiziere und versuche, ihn zu verwenden

/* @var $psr `Psr\Log\LoggerInterface` */
$psr->info("This is a message");

Die Nachricht wird erfolgreich protokolliert, aber das System ruft meine Plugin-Methode nicht auf.

Gibt es etwas Besonderes an der? Psr\Log\LoggerInterface das macht es nicht-pluginfähig?Wenn nicht, verfügt jemand über eine solide Methode zum Debuggen von Plugin-Konfigurationsproblemen?

War es hilfreich?

Lösung 2

Nach ein wenig Recherche stellt sich heraus, dass Psr\Log\LoggerInterface (und der zugrunde liegende Beton Monolog Implementierungsklasse) dürfen eingesteckt werden.Das Problem bestand darin, dass Sie eine vollständige Di-Kompilierung durchführen müssen, wenn Sie den Entwicklermodus aktiviert haben (siehe diesen Fehler).Läuft

php bin/magento setup:di:compile

Die Interceptoren sollten generiert werden und die Plugins funktionieren.

Andere Tipps

PSR\Log\LoggerInterface befindet sich nicht im Magento-Modul- oder Framework-Ordner.Es wird also nicht vom Compiler analysiert und nicht im Produktionsmodus eingebunden.Wenn Sie das Verhalten von Klassen von Drittanbietern per Plugin anpassen/konfigurieren möchten, sollten Sie einen Adapter verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top