Magento 2: Quel mécanisme d'extension choisir?


9

Nous pouvons étendre le contrôleur de deux manières: en utilisant les préférences et en utilisant le plugin. Mais je ne comprends pas cela, lequel est bon et les avantages / inconvénients de préférence par rapport au plugin.

<preference for="Magento\Checkout\Controller\Index\Index" type="mymodule\Helloworld\Controller\Index\Index" />

<type name="Magento\Catalog\Model\Product">
    <plugin name="getname-test-module" type="mymodule\Helloworld\Model\Plugin\Product" sortOrder="10"/>
</type>

Réponses:


11

Utilisez des plugins dans la mesure du possible, puis des observateurs (voir les avantages et les inconvénients de chacun ), cela vous permettra d'éviter les conflits avec d'autres extensions (modules tiers).

La préférence ne doit être utilisée que si l'ensemble de l'implémentation de classe / interface de base doit être remplacé par une implémentation personnalisée. Tenez compte du fait qu'une seule préférence est active à la fois (laquelle est définie par la séquence définie dans module.xml), donc si une autre extension définit une préférence pour la même classe / interface, il y aura un conflit (ces extensions ne peuvent pas fonctionner ensemble).


4
  • Si votre fonctionnalité remplace complètement la fonctionnalité principale, vous pouvez utiliser des préférences.
  • Si vous souhaitez ajouter la fonctionnalité à la base ou remplacer partiellement une méthode de classe, veuillez utiliser des plugins.

1
Il semble prudent de noter que si vous remplacez les fonctionnalités de base, il vous incombe de surveiller les mises à jour de base et de vous assurer que vos modules personnalisés sont à jour
Robbie Averill

1

infos supplémentaires: presque toutes les préférences utilisées dans le m2 interne c'est juste pour garder la relation entre la classe de béton de base et l'interface, comme:

<preference for="Magento\Store\Model\StoreManagerInterface" type="Magento\Store\Model\StoreManager" />

comme vous le faites, il est utilisé une fois, je pense:

<preference for="Magento\ImportExport\Controller\Adminhtml\Export\GetFilter" type="Magento\AdvancedPricingImportExport\Controller\Adminhtml\Export\GetFilter" />
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.