Magento 2 tiene el concepto de Complementos / Intercepción / Interceptores opuestos a Magento 1.
Estos actúan como un antes | después del evento para cada método público. Lo cual es bueno.
También puede usar el around
complemento para reemplazar la funcionalidad de un método.
Pero Magento 2 todavía ofrece la posibilidad de reescribir clases más o menos de la manera M1.
Me gustaría ver algunos ejemplos donde las clases de reescritura son el camino a seguir en lugar de usar complementos.
Sé que esto es útil cuando desea cambiar el comportamiento de un método protegido central, pero ¿hay otros casos en los que se recomienda o necesita una reescritura?
17
Respuestas:
La razón obvia para usar una reescritura en lugar de un complemento es cuando necesita anular un método privado, protegido o final .
Pero también considere los siguientes escenarios.
1er escenario (orden de clasificación absoluto):
Las reescrituras pueden ser útiles cuando necesita que su código se ejecute antes de los complementos . Sé que puedes hacerlo configurando el complemento
sortOrder
, pero no puedes estar seguro de que tu código siempre será el primero cuando alguien (no tú) vaya a instalar componentes de terceros.2do escenario (excluir código):
Si necesita excluir o reescribir solo un fragmento de código en un método, un complemento podría ser una forma subóptima. Sé que puedes usar un
around
complemento y evitar llamar alproceed
, pero esto podría romper otros complementos en la pila.3er escenario (estilo de código):
Debería usar reescrituras cuando necesite reescribir un comportamiento, los complementos deben usarse para modificar la salida o ejecutar el código antes / después.
Un complemento, siempre debe ejecutar el código original para evitar romper otros módulos.
Mi conclusión:
Si puede considerar un método central como un cuadro negro con una entrada y una salida y es independiente de sus mecanismos internos, entonces un complemento podría ser la mejor opción.
Si necesita cambiar un comportamiento interno , una reescritura podría ser la mejor opción.
fuente
Gran pregunta, me pregunté lo mismo el otro día y esto es lo que se me ocurrió:
Fuente: Curso fundamental de Magento U
fuente