Elenco eventi Magento 2


Risposte:


18

Ho messo insieme un elenco di eventi Magento 2 usando

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

L'elenco è diviso in 2 parti, una per eventi statici e una per dinamica.

Da qui , gli eventi statici sono tutti quegli eventi definiti con il nome completo dell'evento come:

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

Gli eventi dinamici sono tutti quegli eventi definiti dinamicamente, in fase di esecuzione, recuperati dal nome dell'evento come:

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

L'elenco è in un foglio di calcolo per una lettura migliore. Ho lasciato 2 righe dopo la partita per una migliore comprensione del contesto dell'evento.

Lo stesso elenco può essere trovato cercando nel repository Magento 2 ufficiale per_eventManager->dispatch


L'elenco è molto utile ma sembra incompleto. L'evento, sales_order_save_afterad esempio, che è abbastanza importante per il mio compito attuale, manca e quando cerchi nel repository Magento 2 noterai che non ce n'è dispatchper niente: github.com/magento/magento2/… Non ne ho ancora idea come vengono inviati questi eventi ma sarebbe bello includerli nell'elenco!
Jey DWork,

Come fai a sapere se il nome dell'evento non esiste? Forse stai cercando un equivalente in Magento 2 con un altro nome?
mbalparda,

Non sono sicuro se stiamo parlando della stessa cosa. Mi stavo solo chiedendo perché l'evento sales_order_save_after(come solo un esempio) non compare nell'elenco (e la ricerca), inoltre non sembra un evento dinamico. E poi pensavo se e come fosse possibile includere tali eventi per ottenere un elenco più completo. E ovviamente sto parlando solo di Magento 2 sales_order_save_afterè un evento di Magento 2, per quanto ne so.
Jey DWork, l'

14

Ovviamente, non è una buona pratica, ma sto fornendo un link che ha rispettato gli eventi importanti in Magento2

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

Ovviamente l'elenco degli eventi è incompleto, come se avessi lavorato con Magento 1.x, la logica di invio degli eventi viene mantenuta

  1. lib/internal/Magento/Framework/Model/AbstractModel.php Carica eventi prima e dopo di un modello

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

    Salva gli eventi prima e dopo di un oggetto modello

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

    Eliminazione di un oggetto

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

    Cancellare un oggetto

    $this->_eventManager->dispatch($this->_eventPrefix . '_clear', $this->_getEventData());
  2. Invio del controller

    lib / interno / Magento / quadro / App / Azione / 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. Eventi di rendering del layout frontend

    $this->_eventManager->dispatch(
        'controller_action_layout_render_before_' . $this->_request->getFullActionName()
    );
  4. Collezioni di modelli

    lib / interno / Magento / quadro / Modello / ResourceModel / Db / Collezione / AbstractCollection.php

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

Esistono molti di questi eventi, ed è una combinazione di eventi generati in modo esplicito e implicito in Magento2


Roba buona! Dovremmo unire le nostre risposte per avere tutto in un unico posto. Cosa pensi?
mbalparda,

bene anche la tua risposta è autosufficiente
huzefam,

1

Le risposte funzionano soprattutto alla grande, ma a volte è necessario sapere quali eventi vengono generati su un determinato caricamento della pagina e l'ordine in cui vengono generati.

Quindi ecco il modo migliore (secondo me per saperlo), usa xDebug e imposta un punto di interruzione sulla riga 56 nella classe Magento\Framework\Event\Manager(è nella libcartella non nella appcartella).

Nel tuo debugger basta dire a "Valuta e registra" la $eventNamevariabile e guarda tutti gli eventi visualizzati nella console mentre carichi la pagina.

Consiglierei anche di disabilitare l'opzione "Sospendi" poiché potrebbero esserci centinaia di eventi generati, potrebbe essere necessario lasciarlo attivo per colpire il primo breakpoint e quindi rimuoverlo.

Punto di interruzione dei nomi degli eventi Perché penso che questo sia il modo migliore per ottenere tutti gli eventi inviati su un caricamento di pagina è perché questo mostrerà anche tutti gli eventi che vengono inviati dai controller. Ogni controller invia eventi prima e dopo con nomi composti contenenti FullActionName, RouteName e quello postdispatch predefinito. Vedi la Framework\App\Actionclasse con il metodo dispatch () .


0

È difficile far conoscere l'evento in una pagina specifica. Quindi puoi provare questo codice per tenere traccia degli eventi che vengono chiamati e utilizzare quello migliore per le tue esigenze

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

aggiungi questo codice sotto il nome dell'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

Puoi controllare l' elenco in<magentoroot>/var/log/events.log


-1

Puoi controllare di seguito il link degli eventi https://github.com/matinict/Magento-2-Events

Soffro che persone diverse condividano eventi diversi, ma nessuna accuratezza ha perso il mio tempo alla fine, i suoi trucchi vanno al controllo del fornitore di Magento 2, ecc / event.xml, spero che possa essere d'aiuto allo sviluppatore di magento 2

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.