J'ai beaucoup d'expérience avec Magento mais je me suis rendu compte que je ne comprends pas quelle manière de charger un modèle est la bonne et pourquoi. J'ai lu tout ce que je pouvais sur le sujet, mais les gens qui expliquent des choses comme ça ne vont jamais assez loin pour expliquer pourquoi utiliser cette méthode spécifique au lieu d'une autre. Supposons qu'il n'y ait pas de référentiel pour le modèle que je souhaite charger.
Jusqu'à maintenant, j'utilisais toujours le modèle dans le constructeur, puis je le chargeais simplement.
public function __construct(
\Vendor\Module\Model\Something $somethingModel
) {
$this->somethingModel = $somethingModel;
}
public function getTestById($id) {
return $this->somethingModel->load($id);
}
Et cela a toujours fonctionné comme prévu, je suis aussi presque sûr qu'il est ou du moins a été utilisé couramment dans le noyau.
Mais j'ai vu un de mes collègues utiliser
modelFactory->create()->load($id)
Pour autant que je sache, les usines sont utilisées pour créer une nouvelle entité, par exemple, si je voulais créer un nouveau produit, je peux créer l'usine, la remplir avec des données, puis l'enregistrer. Mais là encore, j'ai commencé à faire des recherches sur le sujet et j'ai vu l'exemple de Fabian Schmengler ( Quand devrions-nous utiliser un référentiel et une usine dans Magento 2? ) Qui chargeait le modèle de cette façon et a également découragé les autres de simplement charger les modèles, il ne l'a pas fait. t expliquer pourquoi, en plus de dire que cela «ne fait pas partie du contrat de service». Pour autant que je sache, les référentiels font partie des contrats de service, donc je ne vois aucune connexion ici quand il s'agit de charger des modèles qui ne sont pas disponibles via un référentiel.
Pour ajouter encore plus de confusion, j'ai également trouvé un moyen de charger le modèle en obtenant le resourceModel à partir de modelFactory créé, il a été présenté par Vinai Kopp ( Comment implémenter un contrat de service pour un module personnalisé dans Magento 2? ) Et maintenant je suis complètement perdu car j'ai toujours lu que je ne devais pas utiliser directement les modèles de ressources.
Alors oui, quelqu'un pourrait-il me dire quelle est la bonne façon et pourquoi je devrais l'utiliser à la place de toutes les autres méthodes?