¿La intercepción en magento2 reemplaza a los observadores en magento1?

9

¿Se pretende que la intercepción sea el método preferido cuando se trata de cambiar el comportamiento de un método original en Magento2 como observadores en magento1?

https://wiki.magento.com/display/MAGE2DOC/Using+Interception
Matoeil
fuente

Respuestas:

16

No creo que la intercepción pretenda reemplazar a los observadores de eventos.
Todavía hay eventos enviados en el código Magento2.

Los interceptores son solo una forma de procesar la entrada o salida de un método.
O el comportamiento de un método (usando el aroundinterceptor) pero, por lo que entiendo, es un enfoque arriesgado.

Creo que es más una forma de evitar reescrituras de clase tanto como sea posible.
En Magento 1.x, si necesita modificar el resultado de un método, debe anular la clase que contiene y el método en sí.
Ahora simplemente puede usar before, aftero aroundinterceptores para manipular los datos.

Con los observadores puede manipular datos en ciertos puntos fijos de un método, no en el método completo en sí.

En mi opinión, usar observadores cuando sea posible sigue siendo el mejor enfoque para personalizar incluso en Magento 2.

Marius
fuente
2
De acuerdo. La intercepción es un mecanismo de nivel inferior. Pero no reemplaza los eventos. Los eventos proporcionan una interfaz de proveedor de servicios de nivel superior
Anton Kril
6

La intercepción es la evolución de los eventos. Su objetivo es permitir que un desarrollador escriba su código sin pensar en puntos de extensión.

Con los eventos, debe pensar en los lugares donde realiza Mage :: dispatchEvent () para que su módulo sea personalizable.

La intercepción le permite no pensar en esto. Simplemente escribe tu lógica de negocios. Cada llamada a un método es un evento. Entonces, si escribe su código de una manera adecuada orientada a objetos, será completamente personalizable por diseño.

Pero los eventos proporcionan una interfaz de servicio de nivel superior que habla el lenguaje empresarial. Entonces los eventos permanecerán en Magento 2.

Anton Kril
fuente
¿Puede obtener este hecho importante en los devdocs ya que es una fuente de confusión, especialmente porque todavía tiene muchos eventos en M2? Si sabemos que los eventos están muertos, podemos codificar en consecuencia, no he visto ningún lugar que mencione esto en los documentos. En otros idiomas hay razones para usar eventos a veces e interceptores otras veces, creo que debes aclarar que Magento 2 es diferente.
Karen Baker
5

Actualmente todavía existe la opción de escuchar eventos específicos y sugeriría que los interceptores sean solo un reemplazo para las reescrituras. Todavía usaría los eventos cuando haya uno para sus necesidades.

Si observa la versión actual, algunos de los módulos tienen events.xmlarchivos que incluyen las definiciones.

<event name="cms_wysiwyg_images_static_urls_allowed">
    <observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer"  />
</event>
David modales
fuente
En la última versión de Magento-2, se ha cambiado el patrón de observación. Ahora no necesita declarar el atributo del método en events.xml, ejecutará automáticamente el método de ejecución, igual que el controlador.
Keyur Shah