J'écris un module de paiement pour Magento 2 en ce moment et je le
compare au CodeSniffer "Magento Extension Quality Program Coding Standard"
( https://github.com/magento/marketplace-eqp ).
Pour chacune de mes classes qui utilisent un objet de session (d'extraction), le CodeSniffer répond avec l'avertissement suivant:
Session object MUST NOT be requested in constructor. It can only be passed as a method argument.
J'obtiens l'objet session de la manière suivante:
/**
* 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-t-il un moyen correct d'obtenir l'objet de session?
Je n'ai rien trouvé dans le code de base de Magento 2.
Je n'ai pu trouver du code que là où il est utilisé exactement de la même manière que je l'utilise.
protected $checkoutSession;
avant ConstructorRéponses:
Magento Docs dit
Proxy Magento 2
Donc, dans ton cas
Remarque \ Suffixe proxy pour l'objet \ Magento \ Checkout \ Model \ Session
la source
Comme l'indique l'avertissement:
Vous devez plutôt utiliser des proxys.
Vous pouvez en savoir plus sur les objets proxy ici: http://devdocs.magento.com/guides/v2.1/extension-dev-guide/proxies.html
la source
Selon la norme de codage Magento 2 ECGM2, vous utilisez d'abord la classe de session, puis vous pouvez la passer dans le constructeur sinon cette erreur sera affichée
Exemple:
la source