Magento 2: Plugin vs Observador

27

En Magento 2, ¿cuáles son las ventajas y desventajas de usar un complemento frente a un observador para lograr algo?

Entiendo que los observadores están suscritos a eventos, mientras que los complementos pueden saltar antes y / o después de que se llame a un método público en una clase de Magento, pero ¿seguro que ahora están muy cerca de cruzarse?

Robbie Averill
fuente
observador será muy limitado, pero el complemento hace los cambios para todas las funciones públicas
Pradeep Kumar

Respuestas:

42

Los complementos son omnipresentes ya que es posible modificar / reemplazar el comportamiento de cualquier método público en el sistema. Las personalizaciones deben realizarse utilizando complementos para métodos / clases públicos marcados con @apianotaciones (API pública estable) siempre que sea posible. Tal enfoque garantiza que la personalización seguirá siendo funcional después de los nuevos lanzamientos de Magento. Además de before/ afterplugins mencionados en la pregunta, es posible crear aroundcomplementos para sustituir el comportamiento original.

Por otro lado, los observadores son un mecanismo de extensión heredado heredado de Magento 1, es bastante limitado y debe evitarse si es posible. Sin embargo, a diferencia de los complementos, pueden proporcionar puntos de extensión dentro de métodos protegidos / privados.

Alex Paliarush
fuente
También eche un vistazo a la respuesta hablando de preferencias vs complementos / observadores: magento.stackexchange.com/a/94035/697 , puede ser útil.
Alex Paliarush
@alex: - cómo escribir un complemento para la función protegida, en la mayoría de los casos necesitamos anular la función protegida en esa situación ¿cómo hacerlo? magento.stackexchange.com/questions/91353/…
Pradeep Kumar
Los complementos de @PradeepKumar solo se pueden agregar a métodos públicos. La pregunta que mencionó tiene una respuesta, pero la solución propuesta está bloqueada pero es un problema conocido (los complementos no se pueden aplicar a los tipos virtuales). Como solución temporal, puede declarar el complemento para la clase de URL de marco y agregar lógica condicional basada en argumentos (para que el complemento haga algo solo en su caso)
Alex Paliarush
Yo solo di un ejemplo, hay muchas funciones protegidas en ese caso, cómo anular, de cualquier manera que anule la función protegida
Pradeep Kumar
@PradeepKumar si necesita anular un método protegido, es posible que deba extender la clase y usar preferencia / reescritura. De todos modos, sugiero que hagas una pregunta en lugar de en estos comentarios
Robbie Averill
1

De acuerdo con la guía técnica de Magento ( https://devdocs.magento.com/guides/v2.1/coding-standards/technical-guidelines.html#14-events ): todos los valores (incluidos los objetos) pasados ​​a un evento NO DEBEN ser modificado en el observador de eventos. En cambio, los complementos DEBERÍAN utilizarse para modificar la entrada o salida de una función.

Para mí, la principal diferencia entre complementos y observadores es:

  1. Los complementos solo pueden modificar métodos públicos, mientras que los observadores también pueden modificar privados, protegidos.
  2. Hay un orden de clasificación para los complementos, pero no hay un orden de clasificación para los observadores.
  3. Puede agregar observador solo a los eventos que ya se han enviado en Magento. Los complementos son más flexibles aquí.
transverso
fuente
También puedo actualizar una orden con un observador, ¿verdad?
Robbie Averill
@RobbieAverill sí, puede crear un observador para el checkout_submit_all_afterevento. Su observador se activará después de que el pedido se haya realizado correctamente.
transverso del
¿Eso significa que "no modifican los datos" no es cierto en ese caso?
Robbie Averill
1
Sí, tienes razón @RobbieAverill Tanto los complementos como los observadores pueden modificar los datos. Para mí, la principal diferencia entre complementos y observadores es: 1. Los complementos solo pueden modificar métodos públicos, mientras que los observadores también pueden modificar privados, protegidos. 2. Hay un orden de clasificación para los complementos, pero no hay un orden de clasificación para los observadores. 3. Puede agregar observador solo a los eventos que ya se han enviado en Magento. Los complementos son más flexibles aquí.
Transversus