Ich schreibe gerade ein Zahlungsmodul für Magento 2 und vergleiche es mit dem
CodeSniffer "Magento Extension Quality Program Coding Standard"
( https://github.com/magento/marketplace-eqp ).
Für jede meiner Klassen, die ein (Checkout-) Sitzungsobjekt verwenden, antwortet der CodeSniffer mit der folgenden Warnung:
Session object MUST NOT be requested in constructor. It can only be passed as a method argument.
Ich erhalte das Sitzungsobjekt folgendermaßen:
/**
* 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;
}
Gibt es einen korrekten Weg, um das Sitzungsobjekt zu erhalten?
Ich konnte im Magento 2-Kerncode nichts finden.
Ich konnte nur Code finden, bei dem er genauso verwendet wird wie ich.
protected $checkoutSession;
vor ConstructorAntworten:
Magento Docs sagen
Magento 2 Proxies
Also in deinem Fall
Hinweis \ Proxy- Suffix für das Objekt \ Magento \ Checkout \ Model \ Session
quelle
Wie die Warnung anzeigt:
Sie sollten stattdessen Proxys verwenden.
Weitere Informationen zu Proxy-Objekten finden Sie hier: http://devdocs.magento.com/guides/v2.1/extension-dev-guide/proxies.html
quelle
Gemäß dem Magento 2 ECGM2-Codierungsstandard verwenden Sie zuerst die Sitzungsklasse, dann können Sie sie an den Konstruktor übergeben, andernfalls wird dieser Fehler angezeigt
Beispiel:
quelle