¿Hay alguna lista completa de eventos en Magento 2? Estoy buscando algo como Magento Events Cheat Sheet (1.9)
¿Hay alguna lista completa de eventos en Magento 2? Estoy buscando algo como Magento Events Cheat Sheet (1.9)
Respuestas:
Recopilé una lista de eventos de Magento 2 usando
find . -type f -exec grep -n -H -A 2 -T "eventManager->dispatch(" {} \;
La lista se divide en 2 partes, una para eventos estáticos y otra para dinámicas.
Desde aquí , los eventos estáticos son todos aquellos eventos definidos con el nombre completo del evento como:
$this->_eventManager->dispatch('some_event');
Los eventos dinámicos son todos aquellos eventos definidos con dinámicamente, en tiempo de ejecución, nombre de evento obtenido como:
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
La lista está en una hoja de cálculo para una mejor lectura. Dejé 2 líneas después del partido para una mejor comprensión del contexto del evento.
La misma lista se puede encontrar buscando en el repositorio oficial de Magento 2 para_eventManager->dispatch
sales_order_save_after
Falta el evento, que es bastante importante para mi tarea actual, y cuando busque en el repositorio de Magento 2, notará que no hay nada dispatch
en absoluto: github.com/magento/magento2/ ... Todavía no tengo idea cómo se envían estos eventos, ¡pero sería genial incluirlos en la lista!
sales_order_save_after
(solo como un ejemplo) no aparece en la lista (y la búsqueda) y tampoco parece un evento dinámico. Y luego estaba pensando si y cómo podría ser posible incluir tales eventos para obtener una lista más completa. Y obviamente, solo estoy hablando de que Magento 2 sales_order_save_after
es un evento de Magento 2, por lo que puedo decir.
Obviamente, no es una buena práctica, pero estoy proporcionando un enlace que ha cumplido los eventos importantes en Magento2
http://cyrillschumacher.com/magento2-list-of-all-dispatched-events/
Por supuesto, la lista de eventos está incompleta, como si hubiera trabajado con Magento 1.x, la lógica de envío de eventos se conserva
lib/internal/Magento/Framework/Model/AbstractModel.php
Carga antes y después de eventos de un modelo
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
$this->_eventManager->dispatch($this->_eventPrefix . '_load_after', $params);
Guardar antes y después de eventos de un objeto modelo
$this->_eventManager->dispatch($this->_eventPrefix . '_save_before', $this->_getEventData());
$this->_eventManager->dispatch($this->_eventPrefix . '_save_after', $this->_getEventData());
Eliminar un objeto
$this->_eventManager->dispatch($this->_eventPrefix . '_delete_before', $this->_getEventData());
$this->_eventManager->dispatch($this->_eventPrefix . '_delete_after', $this->_getEventData());
Borrar un objeto
$this->_eventManager->dispatch($this->_eventPrefix . '_clear', $this->_getEventData());
Despacho del controlador
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
Eventos de renderizado de diseño frontend
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
Colecciones de modelos
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]);
Hay muchos eventos de este tipo, y es una combinación de eventos generados explícita e implícitamente en Magento2
Las respuestas sobre todo funcionan muy bien, pero a veces es necesario saber qué eventos se lanzan en una carga de página específica y el orden en que se lanzan.
Entonces, aquí está la mejor manera (en mi opinión para saber esto), use xDebug y establezca un punto de interrupción en la línea 56 en la clase Magento\Framework\Event\Manager
(está en la lib
carpeta, no en la app
carpeta).
En su depurador, simplemente dígale que "evalúe y registre" la $eventName
variable y observe cómo se muestran todos los eventos en la consola a medida que carga la página.
También recomendaría deshabilitar la opción "Suspender", ya que puede haber cientos de eventos, es posible que deba dejarlo activado para que se alcance el primer punto de interrupción y luego puede eliminarlo.
Por qué creo que esta es la mejor manera de obtener todos los eventos enviados en una carga de página es porque esto también le mostrará todos los eventos enviados por los controladores. Cada controlador distribuye eventos antes y después con nombres compuestos que contienen FullActionName, RouteName y el postdispatch predeterminado. Vea la Framework\App\Action
clase bajo el método dispatch () .
Es difícil que el evento se conozca en una página específica. Entonces puede probar este código para rastrear los eventos que se llaman y usar el mejor para sus necesidades
/vendor/magento/framework/Event/Manager.php
agregue este código debajo del nombre del evento
$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
Puedes consultar la lista en<magentoroot>/var/log/events.log
Puede consultar el siguiente enlace de eventos https://github.com/matinict/Magento-2-Events
Sufro que diferentes personas compartan diferentes eventos, pero ninguna precisión perdió mi tiempo por fin, solo trucos van a su proveedor de magento 2, etc / event.xml, espero que sea de ayuda para el desarrollador de magento 2