Existe-t-il une liste complète des événements dans Magento 2? Je recherche quelque chose comme Magento Events Cheat Sheet (1.9)
Existe-t-il une liste complète des événements dans Magento 2? Je recherche quelque chose comme Magento Events Cheat Sheet (1.9)
Réponses:
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
sales_order_save_after
par 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 dispatch
du 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!
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_after
c'est aussi un événement Magento 2, pour autant que je sache.
É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
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());
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
Événements de rendu de mise en page frontend
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
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
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 lib
dossier pas le app
dossier).
Dans votre débogueur, dites-lui simplement «Évaluer et consigner» la $eventName
variable 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.
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\Action
classe sous la méthode dispatch () .
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
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.