Réponses:
vous pouvez injecter dans votre classe une instance de \Magento\Quote\Model\QuoteFactory.
protected $quoteFactory;
public function __construct(
...
\Magento\Quote\Model\QuoteFactory $quoteFactory,
....
) {
....
$this->quoteFactory = $quoteFactory;
....
}
Ensuite, vous pouvez utiliser:
$quote = $this->quoteFactory->create()->load($quoteId);
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:
protected $quoteRepository;
public function __construct(
...
\Magento\Quote\Api\CartRepositoryInterface $quoteRepository,
....
) {
....
$this->quoteRepository = $quoteRepository;
....
}
et utilisez ceci:
$this->quoteRepository->get($quoteId);
Si vous voulez voir à quoi ressemble le code, l'implémentation de \Magento\Quote\Api\CartRepositoryInterfaceest\Magento\Quote\Model\QuoteRepository
Vous devez d'abord injecter un \Magento\Quote\Model\QuoteFactorydans votre constructeur de classe:
protected $_quoteFactory;
public function __construct(
...
\Magento\Quote\Model\QuoteFactory $quoteFactory
) {
$this->_quoteFactory = $quoteFactory;
parent::__construct(...);
}
Ensuite, dans votre classe, vous pouvez faire:
$this->_quoteFactory->create()->loadByIdWithoutStore($quoteId);
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é :
$this->_objectManager->create('Magento\Quote\Model\Quote')->loadByIdWithoutStore($quoteId);
\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.
$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.
getvs createest plus évident que l'utilisation de singletons de M1 mais j'ai toujours tendance à en abuser