回答:
クラスにのインスタンスを注入できます\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
、クラスコンストラクターにを挿入する必要があります。
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
いずれかのクラスで1回呼び出すと、他のクラスにも「ロード」されます。おそらくあなたはそれを望まないでしょう。代わりに工場を使用してください。
$this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);
使用できます$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
。get
OMを呼び出すと、シングルトンになります。
get
vsのcreate
方が明白であることがわかりますが、それでも誤用しがちです