Estou escrevendo um módulo de pagamento para o Magento 2 agora e comparando-o com o
CodeSniffer "Padrão de codificação do programa de qualidade de extensão Magento"
( https://github.com/magento/marketplace-eqp ).
Para todas as minhas classes que estão usando um objeto de sessão (checkout), o CodeSniffer responde com o seguinte aviso:
Session object MUST NOT be requested in constructor. It can only be passed as a method argument.
Estou recebendo o objeto de sessão da seguinte maneira:
/**
* Checkout session object
*
* @var \Magento\Checkout\Model\Session
*/
protected $checkoutSession;
/**
* Constructor
*
* @param \Magento\Checkout\Model\Session $checkoutSession
* @return void
*/
public function __construct(\Magento\Checkout\Model\Session $checkoutSession)
{
$this->checkoutSession = $checkoutSession;
}
Existe uma maneira correta de obter o objeto de sessão?
Não encontrei nada no código principal do Magento 2.
Só consegui encontrar o código onde é usado exatamente da mesma maneira que o uso.
protected $checkoutSession;
antes do ConstrutorRespostas:
Os documentos do Magento estão dizendo
Magento 2 Proxies
Então, no seu caso
Nota \ Sufixo proxy para o objeto \ Magento \ Checkout \ Model \ Session
fonte
Como o aviso indica:
Você deve usar proxies.
Você pode descobrir mais sobre objetos proxy aqui: http://devdocs.magento.com/guides/v2.1/extension-dev-guide/proxies.html
fonte
De acordo com o padrão de codificação Magento 2 ECGM2, você primeiro usa a classe session e pode passá-la ao constuctor, caso contrário, esse erro será mostrado
Exemplo:
fonte