Estoy escribiendo un módulo de pago para Magento 2 en este momento y lo estoy
comparando con el "Estándar de Codificación del Programa de Calidad de Extensión de Magento" CodeSniffer
( https://github.com/magento/marketplace-eqp ).
Para cada una de mis clases que utilizan un objeto de sesión (pago), CodeSniffer responde con la siguiente advertencia:
Session object MUST NOT be requested in constructor. It can only be passed as a method argument.
Estoy obteniendo el objeto de sesión de la siguiente manera:
/**
* 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;
}
¿Hay una forma correcta de obtener el objeto de sesión?
No pude encontrar nada en el código central de Magento 2.
Solo pude encontrar el código donde se usa exactamente de la misma manera que lo uso.
protected $checkoutSession;
antes de ConstructorRespuestas:
Los documentos de Magento dicen
Proxies de Magento 2
Entonces, en tu caso
Nota \ Sufijo de proxy para el objeto \ Magento \ Checkout \ Model \ Session
fuente
Como indica la advertencia:
Deberías usar proxies en su lugar.
Puede encontrar más información sobre los objetos proxy aquí: http://devdocs.magento.com/guides/v2.1/extension-dev-guide/proxies.html
fuente
Según el estándar de codificación Magento 2 ECGM2, primero usa la clase de sesión y luego puede pasarlo al constructor; de lo contrario, se mostrará este error
Ejemplo:
fuente