Magento 2: ¿Qué mecanismo de extensión elegir?

9

Podemos extender el controlador de dos maneras: usando preferencia y usando plugin. Pero no entiendo eso, cuál es bueno y las ventajas / desventajas de la preferencia frente al complemento.

<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>
Anand Ontigeri
fuente
Posible duplicado de Magento 2: Plugin vs Observer
7ochem

Respuestas:

11

Use complementos siempre que sea posible, luego observadores (vea los pros y los contras de cada uno ), esto le permitirá evitar conflictos con otras extensiones (módulos de terceros).

La preferencia debe usarse solo si toda la implementación de la clase / interfaz principal debe sustituirse por una personalizada. Tenga en cuenta que solo una preferencia está activa en cualquier momento (cuál está definida por la secuencia definida en module.xml), por lo que si otra extensión define la preferencia por la misma clase / interfaz, habrá un conflicto (estas extensiones no pueden funcionar juntas).

Alex Paliarush
fuente
4
  • Si su funcionalidad reemplaza completamente la funcionalidad principal, entonces puede usar preferencias.
  • Si desea agregar la funcionalidad a la base o reemplazar parcialmente algún método de clase, utilice complementos.
Kandy
fuente
1
Parece prudente tener en cuenta que si se reemplaza la funcionalidad principal y luego la carga está en monitorizar cambios fundamentales y asegurarse de que sus módulos personalizados están al día
Robbie Averill
1

información adicional: casi todas las preferencias utilizadas en el pasante m2 es solo para mantener la relación entre la clase de hormigón base y la interfaz, como:

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

como tu caso es usado una vez pienso:

<preference for="Magento\ImportExport\Controller\Adminhtml\Export\GetFilter" type="Magento\AdvancedPricingImportExport\Controller\Adminhtml\Export\GetFilter" />
Ibnab
fuente