Пока это должно работать, но скоро loadметод уйдет, и вам нужно будет заключить договор на обслуживание.
Так что вы можете использовать \Magento\Quote\Api\CartRepositoryInterface.
То же, что и выше, добавить экземпляр этого класса в ваш класс:
\Magento\Quote\Model\Quoteэто неинъекционный класс. Я имею в виду, что вы можете сделать это, но это не лучшая идея. Если вы внедрите этот класс в 2 других класса, вы получите его как одиночный объект в контейнере DI, и если вы вызовете loadодин раз в одном из классов, он будет «загружен» и в ваш другой класс. Скорее всего, вы этого не хотите. Вместо этого используйте фабрики.
Мариус
@Marius, вот что происходит, когда вы работаете над проектами M1 и M2 одновременно. Вы склонны все путать. Спасибо за освещение и +1 за ваше решение, безусловно, правильный путь к заключению контрактов на обслуживание
Рафаэль на Digital Pianism
Вместо этого $this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);вы можете использовать по $this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);той же причине, указанной выше. вызов getОМ приведет к одиночке.
Мариус
@Marus Я считаю, что getпротив createболее очевидна, чем использование синглетонов M1, но я все еще склонен злоупотреблять ими
Сначала вам нужно добавить
\Magento\Quote\Model\QuoteFactory
в конструктор вашего класса:Тогда в вашем классе вы можете сделать:
Кроме того, вы можете использовать следующие методы для загрузки цитаты:
loadActive($quoteId)
куда он загружает соответствующую активную цитату (гдеis_active
= 1)loadByCustomerId($customerId)
где он загружает активную квоту, соответствующую идентификатору клиента.NB: вы также можете напрямую использовать диспетчер объектов, но это не рекомендуется :
источник
\Magento\Quote\Model\Quote
это неинъекционный класс. Я имею в виду, что вы можете сделать это, но это не лучшая идея. Если вы внедрите этот класс в 2 других класса, вы получите его как одиночный объект в контейнере DI, и если вы вызоветеload
один раз в одном из классов, он будет «загружен» и в ваш другой класс. Скорее всего, вы этого не хотите. Вместо этого используйте фабрики.$this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);
вы можете использовать по$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
той же причине, указанной выше. вызовget
ОМ приведет к одиночке.get
противcreate
более очевидна, чем использование синглетонов M1, но я все еще склонен злоупотреблять ими