Magento 2: Qual mecanismo de extensão escolher?

9

Podemos estender o controlador de duas maneiras: usando a preferência e usando o plugin. Mas eu não entendo isso, qual é bom e vantagens / desvantagens de preferência vs 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>
Anand Ontigeri
fonte
Possível duplicata do Magento 2: Plugin vs Observer
7ochem

Respostas:

11

Use plugins sempre que possível e, em seguida, observadores (consulte os prós e contras de cada um ), para evitar conflitos com outras extensões (módulos de terceiros).

A preferência deve ser usada apenas se toda a implementação da classe / interface principal for substituída por uma customizada. Leve em consideração que apenas uma preferência está ativa a qualquer momento (qual é definida pela sequência definida em module.xml); portanto, se outra extensão definir preferência para a mesma classe / interface, haverá um conflito (essas extensões não poderão funcionar juntas).

Alex Paliarush
fonte
4
  • Se sua funcionalidade substituir completamente a funcionalidade principal, você poderá usar preferências.
  • Se você deseja adicionar a funcionalidade à base ou substituir parcialmente algum método de classe, use plugins.
KAndy
fonte
11
Parece prudente nota que se você substituir a funcionalidade do núcleo, em seguida, a carga está em você para monitorar atualizações essenciais e garantir que seus módulos personalizados são até à data
Robbie Averill
1

informações adicionais: quase todas as preferências usadas no m2 interno é apenas para manter a relação entre a classe de concreto base e a interface, como:

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

como você é usado uma vez eu penso:

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