Answers:
您可以在课程中插入的实例\Magento\Quote\Model\QuoteFactory
。
protected $quoteFactory;
public function __construct(
...
\Magento\Quote\Model\QuoteFactory $quoteFactory,
....
) {
....
$this->quoteFactory = $quoteFactory;
....
}
然后,您可以使用:
$quote = $this->quoteFactory->create()->load($quoteId);
现在应该可以使用,但是很快该load
方法将消失,您需要使用服务合同。
这样就可以使用了\Magento\Quote\Api\CartRepositoryInterface
。
与上述相同,在您的课程中插入该课程的实例:
protected $quoteRepository;
public function __construct(
...
\Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
....
) {
....
$this->quoteRepository = $quoteRepository;
....
}
并使用此:
$this->quoteRepository->get($quoteId);
如果您想查看代码的外观,则其实现\Magento\Quote\Api\CartRepositoryInterface
是\Magento\Quote\Model\QuoteRepository
首先,您需要\Magento\Quote\Model\QuoteFactory
在类构造函数中注入a :
protected $_quoteFactory;
public function __construct(
...
\Magento\Quote\Model\QuoteFactory $quoteFactory
) {
$this->_quoteFactory = $quoteFactory;
parent::__construct(...);
}
然后,在您的课程中,您可以执行以下操作:
$this->_quoteFactory->create()->loadByIdWithoutStore($quoteId);
另外,您还可以使用以下方法加载报价:
loadActive($quoteId)
加载相应的活动报价的位置(其中is_active
= 1)loadByCustomerId($customerId)
加载与客户ID相对应的有效报价。注意:您也可以直接使用对象管理器来执行此操作,但不建议这样做:
$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
\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
OM将导致单例。
get
vs create
比使用M1单身更明显,但是我仍然倾向于滥用它们