Magento 2:选择哪种扩展机制?


9

我们可以通过两种方式扩展控制器:使用首选项和使用插件。但是我不明白,哪一个是好的,以及偏好vs插件的优缺点。

<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>

Answers:


11

尽可能使用插件,然后使用观察者(请参阅每种方法的优缺点),这将使您避免与其他扩展(第三方模块)发生冲突。

仅当整个核心类/接口实现应替换为自定义类时,才应使用首选项。考虑到在任何时候都只有一个首选项处于活动状态(该首选项由中定义的序列定义module.xml),因此,如果另一个扩展为同一类/接口定义了首选项,则会发生冲突(这些扩展不能一起工作)。


4
  • 如果您的功能完全取代了核心功能,则可以使用首选项。
  • 如果要向基础添加功能或部分替换某些类方法,请使用插件。

1
谨慎地注意,如果您替换核心功能,那么您就必须负担监控核心更新并确保自定义模块为最新的负担
Robbie Averill

1

adittional infos:实习生m2中使用的几乎所有首选项,仅用于保持基础混凝土类和接口之间的关系,例如:

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

如您所见,它曾经使用过一次:

<preference for="Magento\ImportExport\Controller\Adminhtml\Export\GetFilter" type="Magento\AdvancedPricingImportExport\Controller\Adminhtml\Export\GetFilter" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.