Isso deve funcionar por enquanto, mas em breve o loadmétodo desaparecerá e você precisará usar um contrato de serviço.
Então você pode usar \Magento\Quote\Api\CartRepositoryInterface.
O mesmo que acima, injete uma instância desta classe em sua classe:
\Magento\Quote\Model\Quoteé uma classe não injetável. Quero dizer, você pode injetar, mas não é a melhor ideia para fazê-lo. Se você injetar essa classe em outras 2 classes, você a receberá como um singleton no contêiner DI e se você ligar loaduma vez em uma das classes, também a terá "carregada" na outra classe. Muito provavelmente você não quer isso. Use fábricas em seu lugar.
Marius
@ Marius, aqui está o que acontece quando você está trabalhando em projetos M1 e M2 ao mesmo tempo. Você tende a misturar tudo. Obrigado pela enlight e um para a sua solução, definitivamente, o caminho certo para ir com contratos de serviços
Raphael em Digital pianismo
Em vez de $this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);você pode usar $this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);Pelo mesmo motivo indicado acima. chamar geto OM resultará em um singleton.
Marius
@Marius Acho que getvs createé mais óbvio do que o uso de singletons de M1 mas eu ainda tendem a abusar deles
Primeiro você precisa injetar um
\Magento\Quote\Model\QuoteFactory
no construtor de sua classe:Então, na sua turma, você pode fazer:
Em uma nota lateral, você também pode usar os seguintes métodos para carregar uma cotação:
loadActive($quoteId)
onde carrega a cotação ativa correspondente (em queis_active
= 1)loadByCustomerId($customerId)
onde ele carrega a cotação ativa correspondente ao ID do cliente.Nota: você também pode usar o gerenciador de objetos diretamente para fazê-lo, mas não é recomendado :
fonte
\Magento\Quote\Model\Quote
é uma classe não injetável. Quero dizer, você pode injetar, mas não é a melhor ideia para fazê-lo. Se você injetar essa classe em outras 2 classes, você a receberá como um singleton no contêiner DI e se você ligarload
uma vez em uma das classes, também a terá "carregada" na outra classe. Muito provavelmente você não quer isso. Use fábricas em seu lugar.$this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);
você pode usar$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
Pelo mesmo motivo indicado acima. chamarget
o OM resultará em um singleton.get
vscreate
é mais óbvio do que o uso de singletons de M1 mas eu ainda tendem a abusar deles