回答:
クラスにのインスタンスを注入できます\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);。getOMを呼び出すと、シングルトンになります。
getvsのcreate方が明白であることがわかりますが、それでも誤用しがちです