Gibt es eine vollständige Liste der Ereignisse in Magento 2? Ich suche nach etwas wie Magento Events Cheat Sheet (1.9)
Gibt es eine vollständige Liste der Ereignisse in Magento 2? Ich suche nach etwas wie Magento Events Cheat Sheet (1.9)
Antworten:
Ich habe eine Liste von Magento 2-Ereignissen mit zusammengestellt
find . -type f -exec grep -n -H -A 2 -T "eventManager->dispatch(" {} \;
Die Liste ist in zwei Teile unterteilt, einen für statische Ereignisse und einen für Dynamik.
Von hier aus sind statische Ereignisse alle Ereignisse, die mit dem vollständigen Ereignisnamen wie folgt definiert sind:
$this->_eventManager->dispatch('some_event');
Dynamische Ereignisse sind alle Ereignisse, die mit dem dynamisch zur Laufzeit abgerufenen Ereignisnamen definiert sind:
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
Die Liste befindet sich zur besseren Lesbarkeit in einer Tabelle. Ich habe nach dem Match 2 Zeilen hinterlassen, um den Event-Kontext besser zu verstehen.
Dieselbe Liste kann auch im offiziellen Magento 2-Repo nach gesucht werden_eventManager->dispatch
sales_order_save_after
zum Beispiel für meine aktuelle Aufgabe ziemlich wichtig ist, fehlt und wenn Sie das Magento 2-Repo durchsuchen, werden Sie feststellen, dass es überhaupt kein Ereignis dafür gibt dispatch
: github.com/magento/magento2/… Ich habe noch keine Ahnung wie diese Ereignisse ausgelöst werden, aber es wäre großartig, sie in die Liste aufzunehmen!
sales_order_save_after
(nur als ein Beispiel) nicht in der Liste (und der Suche) auftaucht und auch nicht wie ein dynamisches Ereignis aussieht. Und dann überlegte ich, ob und wie es möglich sein könnte, solche Ereignisse einzubeziehen, um eine vollständigere Liste zu erhalten. Und natürlich spreche ich nur von Magento 2, sales_order_save_after
einem Magento 2-Event, soweit ich das beurteilen kann.
Offensichtlich keine gute Praxis, aber ich biete einen Link, der die wichtigen Ereignisse in Magento2 erfüllt hat
http://cyrillschumacher.com/magento2-list-of-dispatched-events/
Natürlich ist die Ereignisliste unvollständig, als ob Sie mit Magento 1.x gearbeitet hätten, die Ereignisauslöselogik bleibt erhalten
lib/internal/Magento/Framework/Model/AbstractModel.php
Laden vor und nach Ereignissen eines Modells
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
$this->_eventManager->dispatch($this->_eventPrefix . '_load_after', $params);
Speichern Sie vor und nach Ereignissen eines Modellobjekts
$this->_eventManager->dispatch($this->_eventPrefix . '_save_before', $this->_getEventData());
$this->_eventManager->dispatch($this->_eventPrefix . '_save_after', $this->_getEventData());
Ein Objekt löschen
$this->_eventManager->dispatch($this->_eventPrefix . '_delete_before', $this->_getEventData());
$this->_eventManager->dispatch($this->_eventPrefix . '_delete_after', $this->_getEventData());
Ein Objekt löschen
$this->_eventManager->dispatch($this->_eventPrefix . '_clear', $this->_getEventData());
Controller Versand
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
Ereignisse beim Rendern des Frontend-Layouts
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
Sammlungen von Modellen
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]);
Es gibt viele solcher Ereignisse und es ist eine Kombination aus explizit und implizit erzeugten Ereignissen in Magento2
Die Antworten funktionieren vor allem gut, aber manchmal müssen Sie wissen, welche Ereignisse auf einer bestimmten Seite geladen werden und in welcher Reihenfolge sie ausgelöst werden.
Hier ist also der beste Weg (meiner Meinung nach, um dies zu wissen), xDebug zu verwenden und einen Haltepunkt in Zeile 56 der Klasse zu setzen Magento\Framework\Event\Manager
(er befindet sich im lib
Ordner, nicht im app
Ordner).
Sagen Sie in Ihrem Debugger einfach, dass die Variable ausgewertet und protokolliert$eventName
werden soll, und dass alle Ereignisse in der Konsole angezeigt werden, während Sie die Seite laden.
Ich würde auch empfehlen, die "Suspend" -Option zu deaktivieren, da möglicherweise Hunderte von Ereignissen ausgelöst werden. Möglicherweise müssen Sie sie aktiviert lassen, damit der erste Haltepunkt erreicht wird, und dann können Sie sie entfernen.
Ich denke, dies ist der beste Weg, um alle Ereignisse beim Laden einer Seite auszulösen, da hier auch alle Ereignisse angezeigt werden, die von Controllern ausgelöst wurden. Jeder Controller löst Ereignisse am vor und nach dem mit zusammengesetzten Namen aus, die den FullActionName, den RouteName und den Standard-Post-Dispatch-Namen enthalten. Siehe die Framework\App\Action
Klasse unter der Methode dispatch () .
Es ist schwierig , die Veranstaltung auf einer bestimmten Seite bekannt zu machen. Sie können diesen Code also verwenden, um die aufgerufenen Ereignisse zu verfolgen und das für Ihre Anforderungen am besten geeignete Ereignis zu verwenden
/vendor/magento/framework/Event/Manager.php
Fügen Sie diesen Code unter dem Ereignisnamen ein
$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
Sie können die Check - Liste in<magentoroot>/var/log/events.log
Sie können unter dem Link der Ereignisse https://github.com/matinict/Magento-2-Events überprüfen
Ich leide, dass verschiedene Leute unterschiedliche Ereignisse teilen, aber keine Genauigkeit verloren meine Zeit. Endlich sind es nur Tricks, die Sie zu Ihrem Magento 2-Vendor-Check etc / event.xml geschickt haben