Я пишу модуль оплаты для Magento 2 прямо сейчас и проверяю его на соответствие
CodeSniffer «Стандарт кодирования программы расширения качества Magento»
( https://github.com/magento/marketplace-eqp ).
Для каждого из моих классов, которые используют объект сеанса (извлечение), CodeSniffer отвечает следующим предупреждением:
Session object MUST NOT be requested in constructor. It can only be passed as a method argument.
Я получаю объект сеанса следующим образом:
/**
* 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;
}
Есть ли правильный способ получить объект сеанса?
Я не смог найти ничего в коде ядра Magento 2.
Я мог только найти код, где он используется точно так же, как я его использую.
protected $checkoutSession;
раньше конструктораОтветы:
Magento Docs говорят
Magento 2 Прокси
Итак, в вашем случае
Примечание \ Прокси- суффикс для объекта \ Magento \ Checkout \ Model \ Session
источник
Как указывает предупреждение:
Вы должны использовать прокси вместо этого.
Вы можете узнать больше об объектах прокси здесь: http://devdocs.magento.com/guides/v2.1/extension-dev-guide/proxies.html
источник
В соответствии со стандартом кодирования Magento 2 ECGM2 вы сначала используете класс сеанса, а затем можете передать его в конструктор, в противном случае будет показана эта ошибка.
Пример:
источник