Data: 30 de maio de 2015 (dada a natureza mutável do Magento 2).
O Magento 2 introduziu um conceito de plug-in , implementado através de um padrão interceptador .
O que não está claro nos documentos é: quais classes e objetos no Magento são "interceptáveis"? Ou seja, você configura um plug-in com XML parecido com o seguinte
<config>
<type name="{ObservedType}">
<plugin name="{pluginName}" type="{PluginClassName}" sortOrder="1" disabled="true"/>
</type>
</config>
mas não está claro quais classes são válidas como ObservedType
. Este artigo antigo da wiki fornece algumas dicas quando diz
Observe que o recurso de plug-in não se aplica a - Classes criadas sem injeção de dependência, ou seja, criadas com o operador new diretamente, -Final methods, -Final classes
Existe algum objeto criado por injeção de dependência disponível para interceptação? A ObservedType
necessidade de ser a dica de tipo fornecida no __construct
método a ou pode (deveria?) Ser outra coisa?
Principalmente tentando entender o que pode e o que não pode ser feito com um interceptador Magento 2 antes de começar a usá-los.
fonte
Estamos trabalhando nas anotações "@api" para anotar os métodos recomendados que serão mais estáveis nas versões. Se você se preocupa com a capacidade de atualização, além do que pode ter um plug-in definido, você também deve considerar o que deve ter um plug-in definido. Não recomendamos a interceptação de métodos que não sejam @ api, mas às vezes sabemos que essa pode ser a melhor opção. Deixamos isso a critério do desenvolvedor.
Oficialmente, você pode interceptar métodos públicos que não são finais. Métodos privados definitivamente não funcionam. Na memória, atualmente a interceptação funciona criando uma classe descendente que herda a classe real (a estrutura de injeção de dependência cria instâncias da classe gerada quando você solicita uma nova instância da classe real). Portanto, qualquer coisa que permita a criação de uma subclasse e o método original substituído provavelmente funcionará, mas métodos públicos são recomendados, dando-nos flexibilidade para usar outra implementação inteligente no futuro (o que nunca seria realista sem uma boa razão) .
fonte
Eu sei que isso já tem uma resposta, mas é de 2 anos atrás. Talvez algumas coisas tenham mudado nesse meio tempo.
Aqui está o que eu encontrei até agora.
A partir da documentação oficial e da escavação no processo de interceptação.
Eu responderei o contrário.
O que NÃO PODE ser interceptado no Magento 2.
A partir do documento oficial
De cavar
\Magento\Framework\Phrase
)\Magento\Framework\ObjectManager\NoninterceptableInterface
. (Por exemplo,\Magento\Framework\App\Cache\Proxy
e todos os outros proxies gerados automaticamente)fonte