Liste des événements Magento 2

Réponses:

18

J'ai compilé une liste d'événements Magento 2 en utilisant

find . -type f -exec grep -n -H -A 2 -T "eventManager->dispatch(" {} \;

La liste est divisée en 2 parties, une pour les événements statiques et une pour la dynamique.

À partir d' ici , les événements statiques sont tous ces événements définis avec un nom d'événement complet comme:

$this->_eventManager->dispatch('some_event');

Les événements dynamiques sont tous ces événements définis avec dynamiquement, lors de l'exécution, un nom d'événement récupéré comme:

$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);

La liste est dans une feuille de calcul pour une meilleure lecture. J'ai laissé 2 lignes après le match pour une meilleure compréhension du contexte de l'événement.

La même liste peut être trouvée en cherchant dans le dépôt officiel de Magento 2 pour_eventManager->dispatch

mbalparda
la source
La liste est très utile mais elle semble incomplète. L'événement sales_order_save_afterpar exemple qui est assez important pour ma tâche actuelle est manquant et lorsque vous recherchez dans le repo de Magento 2, vous remarquerez qu'il n'y en a pas dispatchdu tout: github.com/magento/magento2/… Je n'ai aucune idée encore comment ces événements sont distribués, mais ce serait formidable de les inclure dans la liste!
Jey DWork
Comment savez-vous que le nom de l'événement n'existe pas? Peut-être que vous cherchez un équivalent dans Magento 2 avec un autre nom?
mbalparda
Je ne sais pas si nous parlons de la même chose. Je me demandais simplement pourquoi l'événement sales_order_save_after(comme un exemple) n'apparaît pas dans la liste (et la recherche) et il ne ressemble pas non plus à un événement dynamique. Et puis je me demandais si et comment il était possible d'inclure de tels événements pour obtenir une liste plus complète. Et évidemment, je ne parle que de Magento 2, sales_order_save_afterc'est aussi un événement Magento 2, pour autant que je sache.
Jey DWork
14

Évidemment, ce n'est pas une bonne pratique, mais je fournis un lien qui a respecté les événements importants de Magento2

http://cyrillschumacher.com/magento2-list-of-all-dispatched-events/

Bien sûr, la liste des événements est incomplète, comme si vous avez travaillé avec Magento 1.x, la logique de répartition des événements est conservée

  1. lib/internal/Magento/Framework/Model/AbstractModel.php Charger les événements avant et après d'un modèle

    $this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
    $this->_eventManager->dispatch($this->_eventPrefix . '_load_after', $params);

    Enregistrer les événements avant et après d'un objet de modèle

    $this->_eventManager->dispatch($this->_eventPrefix . '_save_before', $this->_getEventData());
    $this->_eventManager->dispatch($this->_eventPrefix . '_save_after', $this->_getEventData());

    Supprimer un objet

    $this->_eventManager->dispatch($this->_eventPrefix . '_delete_before', $this->_getEventData());
    $this->_eventManager->dispatch($this->_eventPrefix . '_delete_after', $this->_getEventData());

    Effacer un objet

    $this->_eventManager->dispatch($this->_eventPrefix . '_clear', $this->_getEventData());
  2. Envoi du contrôleur

    lib / internal / Magento / Framework / App / Action / Action.php

    $this->_eventManager->dispatch(
        'controller_action_predispatch_' . $request->getFullActionName(),
        $eventParameters
    );
    
    eg // controller_action_predispatch_checkout_cart_index
    
    
    $this->_eventManager->dispatch(
        'controller_action_postdispatch_' . $request->getFullActionName(),
        $eventParameters
    );
    eg // controller_action_postdispatch_checkout_cart_index
  3. Événements de rendu de mise en page frontend

    $this->_eventManager->dispatch(
        'controller_action_layout_render_before_' . $this->_request->getFullActionName()
    );
  4. Collections de modèles

    lib / internal / Magento / Framework / Model / ResourceModel / Db / Collection / AbstractCollection.php

    $this->_eventManager->dispatch($this->_eventPrefix . '_load_before', [$this->_eventObject => $this]);
    
    $this->_eventManager->dispatch($this->_eventPrefix . '_load_after', [$this->_eventObject => $this]);

Il existe de nombreux événements de ce type, et il s'agit d'une combinaison d'événements générés explicitement et implicitement dans Magento2

huzefam
la source
Bon produit! Nous devons fusionner nos réponses pour tout avoir en un seul endroit. Qu'est-ce que tu penses?
mbalparda
Eh
1

Les réponses fonctionnent avant tout, mais vous devez parfois savoir quels événements sont lancés sur un chargement de page spécifique et l'ordre dans lequel ils sont lancés.

Il y a donc ici le meilleur moyen (à mon avis de le savoir), utilisez xDebug et définissez un point d'arrêt sur la ligne 56 dans la classe Magento\Framework\Event\Manager(c'est dans le libdossier pas le appdossier).

Dans votre débogueur, dites-lui simplement «Évaluer et consigner» la $eventNamevariable et regardez tous les événements s'afficher dans la console pendant que vous chargez la page.

Je recommanderais également de désactiver l'option "Suspendre" car il peut y avoir des centaines d'événements levés, vous devrez peut-être le laisser allumé pour que le premier point d'arrêt soit atteint, puis vous pouvez le supprimer.

Point d'arrêt des noms d'événement La raison pour laquelle je pense que c'est la meilleure façon d'obtenir tous les événements distribués sur un chargement de page est que cela vous montrera également tous les événements qui sont distribués par les contrôleurs. Chaque contrôleur distribue des événements avant et après avec des noms composés contenant FullActionName, RouteName et le postdispatch par défaut. Voir la Framework\App\Actionclasse sous la méthode dispatch () .

drew7721
la source
0

Il est difficile de connaître l'événement sur une page spécifique. Vous pouvez donc essayer ce code pour suivre les événements à appeler et utiliser le meilleur pour vos besoins

/vendor/magento/framework/Event/Manager.php

ajoutez ce code sous le nom de l'événement

$eventName = mb_strtolower($eventName);

// Code to log all events start
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$dirList = $objectManager->get('\Magento\Framework\App\Filesystem\DirectoryList');
$logPathName = $dirList->getPath('var') . '/log/events.log';
$eventLogFile = fopen($logPathName, 'a');
fwrite($eventLogFile, $eventName . ' => ' . implode(', ', array_keys($data)) . "\n");
fclose($eventLogFile);
// Code to log all events ends

Vous pouvez consulter la liste dans<magentoroot>/var/log/events.log

Priyank
la source
-1

Vous pouvez vérifier ci-dessous le lien des événements https://github.com/matinict/Magento-2-Events

je souffre que différentes personnes partagent un événement différent mais aucune précision n'a finalement perdu mon temps, ses astuces vont à votre vérification de fournisseur magento 2, etc.

matinict
la source