Lista de eventos de Magento 2

Respuestas:

18

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

mbalparda
fuente
La lista es muy útil pero parece incompleta. sales_order_save_afterFalta el evento, que es bastante importante para mi tarea actual, y cuando busque en el repositorio de Magento 2, notará que no hay nada dispatchen 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!
Jey DWork
¿Cómo sabes que el nombre del evento no existe? ¿Quizás estás buscando un equivalente en Magento 2 con otro nombre?
mbalparda
No estoy seguro si estamos hablando de lo mismo. Me preguntaba por qué el evento 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_afteres un evento de Magento 2, por lo que puedo decir.
Jey DWork
14

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

  1. 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());
  2. 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
  3. Eventos de renderizado de diseño frontend

    $this->_eventManager->dispatch(
        'controller_action_layout_render_before_' . $this->_request->getFullActionName()
    );
  4. 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

huzefam
fuente
¡Buen material! Deberíamos fusionar nuestras respuestas para tener todo en un solo lugar. ¿Qué piensas?
mbalparda
bueno, tu respuesta también es autosuficiente
huzefam
1

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 libcarpeta, no en la appcarpeta).

En su depurador, simplemente dígale que "evalúe y registre" la $eventNamevariable 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.

Nombre de evento punto de interrupción 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\Actionclase bajo el método dispatch () .

drew7721
fuente
0

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

Priyank
fuente
-1

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

matinict
fuente