Esto debería funcionar por ahora, pero pronto, el loadmétodo desaparecerá y deberá usar un contrato de servicio.
Entonces puedes usar \Magento\Quote\Api\CartRepositoryInterface.
Igual que el anterior, inyecte una instancia de esta clase en su clase:
\Magento\Quote\Model\QuoteEs una clase no inyectable. Quiero decir que puedes inyectarlo, pero no es la mejor idea hacerlo. Si inyecta esta clase en otras 2 clases, la obtendrá como un singleton en el contenedor DI y si llama loaduna vez en una de las clases, también la tendrá "cargada" en su otra clase. Lo más probable es que no quieras eso. Use fábricas en su lugar.
Marius
@Marius, esto es lo que sucede cuando trabajas en proyectos M1 y M2 al mismo tiempo. Tiendes a mezclar todo. Gracias por la luz y +1 por su solución, definitivamente la forma correcta de ir con los contratos de servicio
Raphael en Digital Pianism
En lugar de $this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);usted puede usarlo $this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);por la misma razón indicada anteriormente. llamar getal OM dará como resultado un singleton.
Marius
@Marius Me parece que getvs createes más obvio que el uso de singletons de M1, pero todavía tiendo a usarlos mal
Primero debes inyectar un
\Magento\Quote\Model\QuoteFactory
en el constructor de tu clase:Luego en tu clase puedes hacer:
En una nota al margen, también puede usar los siguientes métodos para cargar una cotización:
loadActive($quoteId)
donde carga la cotización activa correspondiente (dondeis_active
= 1)loadByCustomerId($customerId)
donde carga la cotización activa correspondiente a la identificación del cliente.NB: también puede usar el administrador de objetos directamente para hacerlo, pero no se recomienda :
fuente
\Magento\Quote\Model\Quote
Es una clase no inyectable. Quiero decir que puedes inyectarlo, pero no es la mejor idea hacerlo. Si inyecta esta clase en otras 2 clases, la obtendrá como un singleton en el contenedor DI y si llamaload
una vez en una de las clases, también la tendrá "cargada" en su otra clase. Lo más probable es que no quieras eso. Use fábricas en su lugar.$this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);
usted puede usarlo$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
por la misma razón indicada anteriormente. llamarget
al OM dará como resultado un singleton.get
vscreate
es más obvio que el uso de singletons de M1, pero todavía tiendo a usarlos mal