Pergunta

Eu tenho um di.xml parecido com isto

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

O Namespace\Modulename\Plugins\Psr classe pode ser instanciada e tem um beforeInfo método definido

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

No entanto, se eu injetar um logger e tentar usá-lo

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

A mensagem será registrada com sucesso, mas o sistema não chama meu método de plugin.

Existe algo especial sobre o Psr\Log\LoggerInterface isso faz com que não seja compatível com plugins?Caso contrário, alguém tem uma metodologia sólida para depurar problemas de configuração de plugins?

Foi útil?

Solução 2

Depois de um pouco de pesquisa, descobriu-se que Psr\Log\LoggerInterface (e seu concreto subjacente Monolog classe de implementação) pode estar conectado.O problema era que, se você tiver o modo de desenvolvedor ativado, precisará fazer uma compilação completa (veja esse bug).Correndo

php bin/magento setup:di:compile

deve gerar os interceptadores e os plugins funcionando.

Outras dicas

PSR\Log\LoggerInterface não está no módulo magento ou na pasta do framework.Portanto, não é analisado pelo compilador e não será pluginizado no modo de produção.Se você deseja pluginizar/configurar o comportamento de classes de terceiros, você deve usar o adaptador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top