Saltar al contenido

Magento2: ¿cuál es la diferencia básica entre plugin y preferencia?

Solución:

Una preferencia es equivalente a la reescritura de clases desde Magento 1. Es equivalente a decir, “Siempre que el código solicite ClassA, darles MyClassB en lugar de.” MyClassB Se espera que sea una implementación completa de ClassA, además de cualquier comportamiento que agregue o modifique en la parte superior.

Al igual que en Magento 1, solo una preferencia (reescritura) puede estar activa para una clase a la vez, a menos que las encadene manualmente (de modo que MyClassB se extiende OtherClassB, y OtherClassB se extiende ClassA).

Un complemento le permite ejecutar código antes, alrededor o después de los métodos de la clase a la que se está conectando. Su clase de complemento no reemplaza a la clase de destino y no es una instancia de ella. Solo tienes métodos before{method}, around{method}, after{method} que se ejecutan en el momento apropiado con respecto a {método} en la clase de destino.

Dado que los complementos no reemplazan la clase de destino, cualquier número de complementos puede estar activo en una clase simultáneamente. Magento simplemente los ejecuta uno tras otro según el parámetro sortOrder en su XML.

Por eso, los complementos son mucho más flexibles que las preferencias. Debe usar complementos siempre que sea posible y evitar preferencias para reescribir clases a menos que sea absolutamente necesario.

Puede leer más sobre cómo funcionan los complementos y cómo usarlos en la documentación oficial.

En palabras simples

La preferencia se usa para invalidar la clase

El complemento se utiliza para agregar funcionalidad antes, después y alrededor de los métodos.

Para como su ejemplo:

<preference for="MagentoCatalogBlockProductListProduct" type="VendorMyModuleBlockProductListProduct" /> 

Siempre que el código solicite ListProduct, preferencia dijo que

Hey, usa VendorMyModuleBlockProductListProduct en lugar de MagentoCatalogBlockProductListProduct

<type name="MagentoCatalogModelProduct">
<plugin name="magento-catalog-product-plugin" type="TrainingTestModelProduct" sortOrder="10"/>
</type>

Siempre que el código solicite getPrice (), plugin dijo que

Hey usa mi getPrice() método antes, después y alrededor de su getPrice() método

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *