Jawaban:
Anda dapat menyuntikkan di kelas Anda contoh \Magento\Quote\Model\QuoteFactory
.
protected $quoteFactory;
public function __construct(
...
\Magento\Quote\Model\QuoteFactory $quoteFactory,
....
) {
....
$this->quoteFactory = $quoteFactory;
....
}
Maka Anda dapat menggunakan:
$quote = $this->quoteFactory->create()->load($quoteId);
Ini seharusnya berfungsi untuk saat ini, tetapi segera, load
metode ini akan hilang dan Anda perlu menggunakan kontrak layanan.
Jadi bisa digunakan \Magento\Quote\Api\CartRepositoryInterface
.
Sama seperti di atas, masukkan instance kelas ini di kelas Anda:
protected $quoteRepository;
public function __construct(
...
\Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
....
) {
....
$this->quoteRepository = $quoteRepository;
....
}
dan gunakan ini:
$this->quoteRepository->get($quoteId);
Jika Anda ingin melihat seperti apa kode itu, implementasinya \Magento\Quote\Api\CartRepositoryInterface
adalah\Magento\Quote\Model\QuoteRepository
Pertama, Anda perlu menyuntikkan \Magento\Quote\Model\QuoteFactory
konstruktor kelas Anda:
protected $_quoteFactory;
public function __construct(
...
\Magento\Quote\Model\QuoteFactory $quoteFactory
) {
$this->_quoteFactory = $quoteFactory;
parent::__construct(...);
}
Kemudian di kelas Anda, Anda dapat melakukan:
$this->_quoteFactory->create()->loadByIdWithoutStore($quoteId);
Di samping catatan Anda juga dapat menggunakan metode berikut untuk memuat penawaran:
loadActive($quoteId)
di mana ia memuat kuotasi aktif yang sesuai (di mana is_active
= 1)loadByCustomerId($customerId)
di mana ia memuat kutipan aktif yang sesuai dengan id pelanggan.NB: Anda juga bisa menggunakan object manager secara langsung untuk melakukannya tetapi tidak disarankan :
$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
\Magento\Quote\Model\Quote
adalah kelas yang tidak dapat disuntikkan. Maksud saya Anda bisa menyuntikkannya, tetapi itu bukan ide terbaik untuk melakukannya. Jika Anda menyuntikkan kelas ini dalam 2 kelas lain, Anda akan mendapatkannya sebagai singleton dalam wadah DI dan jika Anda memanggil load
satu kali di salah satu kelas, Anda akan memilikinya "dimuat" di kelas Anda yang lain juga. Kemungkinan besar Anda tidak menginginkannya. Gunakan pabrik sebagai gantinya.
$this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);
Anda dapat menggunakan $this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
Untuk alasan yang sama disebutkan di atas. memanggil get
OM akan menghasilkan singleton.
get
vs create
lebih jelas daripada penggunaan lajang M1 tapi saya masih cenderung menyalahgunakan mereka