Question

J'ai un di.xml qui ressemble à ceci

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

Le Namespace\Modulename\Plugins\Psr la classe peut être instanciée et possède un beforeInfo méthode définie

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

Cependant, si j'injecte un enregistreur et que j'essaie de l'utiliser

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

Le message sera enregistré avec succès, mais le système n'appelle pas ma méthode de plugin.

Y a-t-il quelque chose de spécial dans le Psr\Log\LoggerInterface cela rend-il non plug-in ?Sinon, quelqu'un a-t-il une méthodologie solide pour déboguer les problèmes de configuration du plugin ?

Était-ce utile?

La solution 2

Après quelques recherches, il s'avère que Psr\Log\LoggerInterface (et son béton sous-jacent Monolog classe d'implémentation) peut être branché.Le problème était que si le mode développeur était activé, vous deviez effectuer une compilation complète (voir ce bug).En cours d'exécution

php bin/magento setup:di:compile

devrait générer les intercepteurs et faire fonctionner les plugins.

Autres conseils

PSR\Log\LoggerInterface n'est pas dans le module magento ou dans le dossier framework.Il n'est donc pas analysé par le compilateur et ne sera pas pluginisé en mode production.Si vous souhaitez pluginiser/configurer le comportement de classes tierces, vous devez utiliser l'adaptateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top