Magento 2 a le concept de plugins / interception / intercepteurs opposés à Magento 1.
Ceux-ci agissent comme un avant | après l'événement pour chaque méthode publique. Ce qui est bien.
Vous pouvez également utiliser le around
plugin pour remplacer la fonctionnalité d'une méthode.
Mais Magento 2 offre toujours la possibilité de réécrire les classes plus ou moins à la manière M1.
J'aimerais voir quelques exemples où les classes de réécriture sont la voie à suivre au lieu d'utiliser des plugins.
Je sais que cela est utile lorsque vous souhaitez modifier le comportement d'une méthode protégée de base, mais existe-t-il d'autres cas où une réécriture est recommandée ou nécessaire?
17
Réponses:
La raison évidente d'utiliser une réécriture au lieu d'un plugin est lorsque vous devez remplacer une méthode privée, protégée ou finale .
Mais considérez également les scénarios suivants.
1er scénario (ordre de tri absolu):
Les réécritures peuvent être utiles lorsque vous avez besoin que votre code soit exécuté avant les plugins . Je sais que vous pouvez le faire en configurant le plugin
sortOrder
, mais vous ne pouvez pas être sûr que votre code sera toujours le premier lorsque quelqu'un (pas vous) va installer des composants tiers.2ème scénario (exclure le code):
Si vous avez besoin d'exclure ou de réécrire juste un morceau de code dans une méthode, un plugin pourrait être un moyen sous-optimal. Je sais que vous pouvez utiliser un
around
plugin et éviter d'appeler leproceed
, mais cela pourrait casser d'autres plugins dans la pile.3e scénario (style de code):
Vous devez utiliser les réécritures lorsque vous devez réécrire un comportement, les plugins doivent être utilisés pour modifier la sortie ou exécuter le code avant / après.
Un plugin, devrait toujours exécuter le code d'origine pour éviter de casser d'autres modules.
Ma conclusion:
Si vous pouvez considérer une méthode principale comme une boîte noire avec une entrée et une sortie et que vous êtes agnostique quant à ses mécanismes internes, alors un plugin pourrait être la meilleure option.
Si vous devez modifier un comportement interne , une réécriture pourrait être la meilleure option.
la source
Excellente question, je me suis posé la même chose l'autre jour et voici ce que j'ai trouvé:
Source: Magento U Fundamental Course
la source