Możemy rozszerzyć kontroler na dwa sposoby: używając preferencji i wtyczki. Ale nie rozumiem tego, który z nich jest dobry i jakie są zalety / wady preferencji w porównaniu do wtyczki.
<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>
module
magento2
event-observer
plugin
Anand Ontigeri
źródło
źródło
Odpowiedzi:
W miarę możliwości używaj wtyczek, a następnie obserwatorów (zobacz zalety i wady każdego z nich ), pozwoli to uniknąć konfliktów z innymi rozszerzeniami (moduły stron trzecich).
Preferencji należy używać tylko wtedy, gdy całą podstawową implementację klasy / interfejsu należy zastąpić niestandardową. Weź pod uwagę, że tylko jedna preferencja jest aktywna w dowolnym momencie (która jest zdefiniowana przez sekwencję zdefiniowaną w
module.xml
), więc jeśli inne rozszerzenie zdefiniuje preferencje dla tej samej klasy / interfejsu, wystąpi konflikt (te rozszerzenia nie mogą ze sobą współpracować).źródło
źródło
dodatkowe informacje: prawie wszystkie preferencje używane w stażu m2 służą tylko do zachowania relacji między podstawową klasą betonu a interfejsem, na przykład:
w twoim przypadku jest on używany raz:
źródło