C'è un elenco completo di eventi in Magento 2? Sto cercando qualcosa come Cheat Sheet di Magento Events (1.9)
C'è un elenco completo di eventi in Magento 2? Sto cercando qualcosa come Cheat Sheet di Magento Events (1.9)
Risposte:
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
sales_order_save_after
ad esempio, che è abbastanza importante per il mio compito attuale, manca e quando cerchi nel repository Magento 2 noterai che non ce n'è dispatch
per niente: github.com/magento/magento2/… Non ne ho ancora idea come vengono inviati questi eventi ma sarebbe bello includerli nell'elenco!
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.
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
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());
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
Eventi di rendering del layout frontend
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
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
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 lib
cartella non nella app
cartella).
Nel tuo debugger basta dire a "Valuta e registra" la $eventName
variabile 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.
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\Action
classe con il metodo dispatch () .
È 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
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