Risposte:
puoi inserire nella tua classe un'istanza di \Magento\Quote\Model\QuoteFactory
.
protected $quoteFactory;
public function __construct(
...
\Magento\Quote\Model\QuoteFactory $quoteFactory,
....
) {
....
$this->quoteFactory = $quoteFactory;
....
}
Quindi puoi usare:
$quote = $this->quoteFactory->create()->load($quoteId);
Questo dovrebbe funzionare per ora, ma presto il load
metodo sparirà e sarà necessario utilizzare un contratto di assistenza.
Quindi puoi usare \Magento\Quote\Api\CartRepositoryInterface
.
Come sopra, iniettare un'istanza di questa classe nella tua classe:
protected $quoteRepository;
public function __construct(
...
\Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
....
) {
....
$this->quoteRepository = $quoteRepository;
....
}
e usa questo:
$this->quoteRepository->get($quoteId);
Se vuoi vedere come appare il codice, l'implementazione \Magento\Quote\Api\CartRepositoryInterface
è\Magento\Quote\Model\QuoteRepository
Per prima cosa devi iniettare a \Magento\Quote\Model\QuoteFactory
nel costruttore della tua classe:
protected $_quoteFactory;
public function __construct(
...
\Magento\Quote\Model\QuoteFactory $quoteFactory
) {
$this->_quoteFactory = $quoteFactory;
parent::__construct(...);
}
Quindi nella tua classe puoi fare:
$this->_quoteFactory->create()->loadByIdWithoutStore($quoteId);
In una nota a margine puoi anche usare i seguenti metodi per caricare un preventivo:
loadActive($quoteId)
dove carica la quota attiva corrispondente (dove is_active
= 1)loadByCustomerId($customerId)
dove carica il preventivo attivo corrispondente all'ID cliente.NB: puoi anche usare direttamente il gestore oggetti per farlo ma non è raccomandato :
$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
\Magento\Quote\Model\Quote
è una classe non iniettabile. Voglio dire che puoi iniettarlo, ma non è l'idea migliore per farlo. Se inietti questa classe in altre 2 classi, la otterrai come singleton nel contenitore DI e se chiami load
una volta in una delle classi, la avrai "caricata" anche nell'altra classe. Molto probabilmente non lo vuoi. Usa invece le fabbriche.
$this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);
te puoi usare $this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
Per lo stesso motivo indicato sopra. chiamando get
l'OM risulterà un singleton.
get
vs create
sia più ovvio dell'uso dei singoli di M1 ma tendo ancora ad