THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Salut !

Doc Thelia 2 wrote:

Example for the case if you want to replace the default action :

<?php

    public static function getSubscribedEvents()
    {
        return array(
            "action.createCustomer" => array("create", 256),
        );
    }

Comme indiqué, si on attribue à un évènement une valeur 256, elle est censée carrément remplacer l'action courante.
Or partout où j'utilise la valeur 256, l'action d'origine est quand même déclenchée (après la première mais déclenchée quand même).

Actuellement pour pallier à ce souci, je suis contraint de commenter les évènements que je ne souhaite pas déclencher directement dans les subscribedEvents() du core Thelia.

Est-ce un bug ? Y'a-t-il une manière plus "normale" d'arranger les choses ?

Merci d'avance !!

Offline


Comme indiqué, si on attribue à un évènement une valeur 256, elle est censée carrément remplacer l'action courante.

Ce n'est pas exactement ce qui est indiqué. La valeur 256 ne permet pas de "carrément remplacer l'action".

Les évènements sont distribués dans un ordre précis, fixé par cette fameuse valeur, qui est une priorité. Par défaut, dans le core de Thelia, les handlers sont définis avec une priorité égale à 128.

Si tu veux intercepter l'évènement avant qu'il arrive au core, utilise pour déclarer ton handler une valeur inférieure 128.
Si tu veux intercepter l'évènement après qu'il soit passé par le core, utilise une valeur supérieure à 128.

Saches que dans ton handler, tu peux stopper la propagation d'un event en invoquant : $event->stopPropagation();
Ainsi, la propagation de l'event est stoppée, et les handlers ayant une priorité supérieure au tient ne seront pas invoqués.

My 2 fifrelins


OpenStudio Toulouse

Offline


OK merci de l'explication détaillée !

J'ai peut-être mal compris la doc sur ce point, mais il faut avouer qu'elle peut prêter à confusion.
J'avais pas noté la méthode stopPropagation() pour arrêter le déclenchement, je vais me servir de ça.

Merci !