Sistemas Plugins de Magento 2

Sistemas Plugins de Magento 2

Adiós a las reescrituras de clases de Magento 1.

 

En Magento 1 es posible la reescritura de cualquier método de la clase padre al indicarle a la aplicación que use una clase definida por nuestro módulo a través de archivos de configuración XML, en vez de coger la clase predefinida de Magento. Aunque sólo puede ser reescrita por un sólo módulo, siendo una desventaja de la aplicación.

 

Plugins

 

Además de la reescritura de clases, Magento 2 incorpora el sistema de plugins con el objetivo de solucionar en la reescritura de clases, el problema de una relación 1-1. Este sistema de plugins posibilita: 

 

  • Reestructurar los argumentos de cualquier método público de una clase.
  • Modificar el valor return de cualquier método de una clase.
  • Escuchar a cualquier método público de una clase administrada por el ObjectManager de Magento.
  • Permitir que otro módulos trabajen sobre la misma clase y el mismo método público.

 

Estos plugins también tienen ciertas limitaciones:

 

  • Método de clase
  • Clases virtuales
  • Métodos finales
  • Clases finales
  • Método no públicos 
  • Funcion-construct

 

Tipos de método de los plugins

 

Gracias al patrón interceptor el sistema de plugins de Magento 2 ofrece tres tipos de métodos: after, before and arround. Para poder actuar sobre el método público que queremos, los plugins en Magento tienen que tener una pequeña nomenclaruta y para eso crearemos una función llamándola de esta manera: 

 

<?php
 public function (before | after | around)NombreDelMetodoDeLaClaseSobreLaQueActuamos($subject, $result | $proceed, $args){
  //Code
 }
?>

 

* Nota el camel case

 

Método before (antes)

 

Permite actuar antes del llamado a la función pública y cambiar los argumentos pasados al método original.

 

Recibe como parámetros:

  • $subject: Objeto original

 

Luego todos y cada uno de los argumentos que recibe el método original, incluyendo parámetros prederteminados. En el caso de tener varios argumentos, la funcion debe devolver los valores en forma de un array.

 

<?php

public function beforeExecute($subject, $arg1, $arg2 = true, $arg3){

 $arg1 = ‘DoIt’;

 return [$arg1, $arg2, $arg3];

}

?>

 

Método after (después)

Permite actuar después del llamado a la función pública.

Recibe como parámetros:

  • $subject: Objeto original
  • $result: Resultado del plugin anterior al nuestro o en su defecto, el método original.

 

<?php 

 public function afterExecute($subject, $result){

  If($result->canDoit){

    //DoIt  

  }

 }

?>

 

Método around (miéntras)

Permite actuar mientras se ejecuta el método público. Es posible cambiar por completo la funcionalidad del método público, ya que tenemos el control de incluso si el método original se ejecuta o no.

Recibe como parámetros:

  • $subject: Objeto original
  • $proceed: Function original del metodo, se le deben de pasar todos los parametros

Luego todos y cada uno de los argumentos que recibe el método original, incluyendo parámetros por defecto.

 

 <?php 

public function aroundExecute($subject, $proceed, $arg1, $arg2 = true, $arg3){

 //$result = $proceed ($arg1, $arg2, $arg3);

 $result = ‘My result’;

 return $result;

}

?>

 

Fuentes:

kperez

Más noticias

Adobe compra Magento por 1.680 MM€

Adobe ha anunciado la adquisición de la plataforma para comercio electrónico, Magento, por 1.680 millones ...

Los “scopes” en Magento 2

Magento 2.X tiene por defecto muchas configuraciones en su panel de administración. Normalmente no indagamos ...
magento versions

Magento cambia el nombre a sus productos

Magento Community , Magento Enterprice , Magento Commerce , Magento versión de pago ... Seguro ...