Je vois que dans la branche develop du repo de Magento 2, les méthodes load
et save
de la Magento\Framework\Model\AbstractModel
classe sont obsolètes.
Mais il y a un milliard de classes dans le noyau qui étendent cette classe et utilisent save
et load
.
Lors de la création de mon propre module pour la partie CRUD de mes entités, je suis les mêmes directives qu’un module de base.
Mais puisque ces méthodes sont déconseillées, je préférerais être préparé pour l'avenir.
Que devrais-je utiliser à la place d'eux? Ou je devrais prolonger quelque chose d'autre?
57
Réponses:
Vous devez utiliser le contrat de service de module.
Par exemple, pour un produit, vous devez utiliser ProductRepositoryInterface.
Si le contrat de service de module n'est pas disponible, vous pouvez utiliser ResourceModel pour enregistrer des entités.
la source
ProductRepositoryInterface
utilise encoreload
dans les méthodesget
etgetById
. Devrais-je utiliser le modèle de ressource pour mon module au lieu de cetteload
méthode?D'après ce que j'ai compris, ce qui va se passer c'est que Magento va passer aux hydrateurs avec
extract()
ethydrate()
méthodes.Ce lien fonctionnait auparavant, mais il semble que l'équipe de Magento l'a annulé: https://github.com/magento/magento2/blob/develop/lib/internal/Magento/Framework/Model/Entity/EntityHydrator.php
Vous pouvez trouver l'historique du commit ici: https://github.com/magento/magento2/tree/09132da06e18dde0f90aabfc962db2bc19b64f3c/lib/internal/Magento/Framework/Model/Entity
Les fichiers importants sont:
EntityHydrator.php
EntityMetadata.php
HydratorInterface.php
MetadataPool.php
Je vous suggère également de consulter les fichiers du
Action
dossier ainsi que lesSequence
fichiers.D'après ce que j'ai compris (je me trompe peut-être totalement ici):
Action
dossier sont des actions CRUDSequence
fichiers sont des itérateurs?C'était une conversation qui a eu lieu il y a quelque temps (Alan Storm en a-t-il parlé? Je ne m'en souviens pas), donc je ne suis pas sûr que l'équipe de Magento continue à suivre cette voie.
Mise à jour
D'après mes recherches, le ticket interne Magento concernant ce changement est MAGETWO-50676, voici les commits connexes que j'ai réussi à trouver:
Il y a probablement plus de TBH mais je n'ai pas envie de parcourir l'intégralité du dépôt pour les messages de validation ^^
Si vous ne connaissez pas les hydrateurs, je vous suggère de vérifier ce lien: http://www.webconsults.eu/blog/entry/108-What_is_a_Hydrator_in_Zend_Framework_2
Mise à jour à partir de 2.1
Magento utilise maintenant la
EntityManager
classe pour remplacer l'héritage. Pour plus d'informations, cliquez ici: Magento 2.1: en utilisant le gestionnaire d'entitésla source
load()/save()
vers des hydrateurs. J'assume leSequences
travail comme des itérateurs etActions
sont des actions CRUDVoir la description dans le code de classe https://github.com/magento/magento2/blob/2.1/lib/internal/Magento/Framework/Model/AbstractModel.php#L626.
la source
load
save
etdelete
vont disparaître?Une alternative à la méthode de chargement obsolète de Magento 2 est la méthode de chargement du modèle de ressource.
Ici, le premier paramètre est l'objet du modèle et le second est l'id que vous voulez charger.
Une alternative à la méthode d'enregistrement obsolète de Magento 2 est la méthode d'enregistrement du modèle de ressource.
La méthode save accepte un seul paramètre qui est votre objet de modèle.
la source