Cela devrait fonctionner pour l'instant, mais bientôt, la loadméthode va disparaître et vous devez utiliser un contrat de service.
Vous pouvez donc utiliser \Magento\Quote\Api\CartRepositoryInterface.
Comme ci-dessus, injectez une instance de cette classe dans votre classe:
\Magento\Quote\Model\Quoteest une classe non injectable. Je veux dire que vous pouvez l'injecter, mais ce n'est pas la meilleure idée de le faire. Si vous injectez cette classe dans 2 autres classes, vous l'obtiendrez en tant que singleton dans le conteneur DI et si vous appelez loadune fois dans l'une des classes, vous l'aurez également "chargée" dans votre autre classe. Vous ne voulez probablement pas cela. Utilisez plutôt des usines.
Marius
@Marius, voici ce qui se passe lorsque vous travaillez simultanément sur des projets M1 et M2. Vous avez tendance à tout mélanger. Merci pour l'illumination et +1 pour votre solution, certainement la bonne façon de procéder avec les contrats de service
Raphael au Digital Pianism
Au lieu de $this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);vous pouvez utiliser $this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);pour la même raison indiquée ci-dessus. faire appel getà l'OM se traduira par un singleton.
Marius
@Marius, je trouve que getvs createest plus évident que l'utilisation de singletons de M1 mais j'ai toujours tendance à en abuser
Raphael au Digital Pianism
Ne t'inquiète pas. J'y suis allé, j'ai fait ça. :)
Vous devez d'abord injecter un
\Magento\Quote\Model\QuoteFactory
dans votre constructeur de classe:Ensuite, dans votre classe, vous pouvez faire:
En passant, vous pouvez également utiliser les méthodes suivantes pour charger un devis:
loadActive($quoteId)
où il charge le devis actif correspondant (oùis_active
= 1)loadByCustomerId($customerId)
où il charge le devis actif correspondant à l'identifiant client.NB: vous pouvez également utiliser le gestionnaire d'objets directement pour le faire mais ce n'est pas recommandé :
la source
\Magento\Quote\Model\Quote
est une classe non injectable. Je veux dire que vous pouvez l'injecter, mais ce n'est pas la meilleure idée de le faire. Si vous injectez cette classe dans 2 autres classes, vous l'obtiendrez en tant que singleton dans le conteneur DI et si vous appelezload
une fois dans l'une des classes, vous l'aurez également "chargée" dans votre autre classe. Vous ne voulez probablement pas cela. Utilisez plutôt des usines.$this->_objectManager->get('Magento\Quote\Model\QuoteFactory')->create()->loadByIdWithoutStore($quoteId);
vous pouvez utiliser$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
pour la même raison indiquée ci-dessus. faire appelget
à l'OM se traduira par un singleton.get
vscreate
est plus évident que l'utilisation de singletons de M1 mais j'ai toujours tendance à en abuser