Les plugins

Les plugins (initialement appelés intercepteurs) permettent de réaliser des actions avant, "pendant" ou après une fonction publique.

Un plugin se déclare dans le fichier di.xml :

<config>
    <type name="<classe sur laquelle appliquer le plugin>">
        <plugin name="<nom unique>" type="<classe plugin de notre module>" sortOrder="1" />
    </type>
</config>

Par convention, nous mettrons les classes plugins dans le dossier Plugin à la racine de notre module.

Pour s'exécuter, notre classe plugin devra contenir une ou plusieurs fonctions appelées before|around|afterLaFonction. Quel que soit le mode voulu, le premier paramètre de la fonction est appelé $subject et est l'instance de la classe sur laquelle le plugin est appliqué.

Before

Configurer un plugin pour s'exécuter avant une fonction permet d'en changer les paramètres. Les paramètres de la fonction originelle sont passés dynamiquement en paramètre à la fonction du plugin. La fonction du plugin devra retourner un tableau contenant les paramètres modifiés pour qu'ils soient pris en compte.

Around

Être around une méthode permet d'exécuter du code avant et/ou après celle-ci. Le deuxième paramètre de la fonction du public est appelé est un callable que l'on appelle $proceed par convention. Nous utiliserons

$proceed();

pour exécuter la fonction originelle.

After

Se positionner après une fonction permet de modifier le retour de celle-ci. Le deuxième paramètre d'une fonction after est la valeur de retour de la fonction originelle.

Attention, les plugins peuvent se chaîner, l'ordre est défini par l'attribut sortOrder et chaque plugin after aura comme valeur de retour la valeur de retour modifiée par le plugin précédent le cas échéant.

TP - Ajouter un montant fixe aux frais de port de la méthode flat rate

Le montant des frais de port du flat rate est de 5 par défaut.