Existe alguma lista completa de eventos no Magento 2? Estou à procura de algo como Magento Events Cheat Sheet (1.9)
Existe alguma lista completa de eventos no Magento 2? Estou à procura de algo como Magento Events Cheat Sheet (1.9)
Respostas:
Eu montei uma lista de eventos Magento 2 usando
find . -type f -exec grep -n -H -A 2 -T "eventManager->dispatch(" {} \;
A lista é dividida em 2 partes, uma para eventos estáticos e outra para dinâmica.
A partir daqui , eventos estáticos são todos aqueles definidos com o nome completo do evento, como:
$this->_eventManager->dispatch('some_event');
Eventos dinâmicos são todos aqueles definidos com nome de evento buscado dinamicamente, em tempo de execução, como:
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
A lista está em uma planilha para uma melhor leitura. Deixei duas linhas após a partida para entender melhor o contexto do evento.
A mesma lista pode ser encontrada pesquisando no repositório oficial do Magento 2 por_eventManager->dispatch
sales_order_save_after
por exemplo, que é muito importante para a minha tarefa atual, está ausente e, quando você pesquisar no repositório Magento 2, notará que não existe dispatch
: github.com/magento/magento2/… ainda não tenho idéia como esses eventos são despachados, mas seria ótimo incluí-los na lista!
sales_order_save_after
(apenas como um exemplo) não aparece na lista (e na pesquisa) e também não parece um evento dinâmico. E então eu estava pensando se e como seria possível incluir esses eventos para obter uma lista mais completa. E, obviamente, só estou falando sobre o Magento 2 sales_order_save_after
é um evento do Magento 2, até onde eu sei.
Obviamente, não é uma boa prática, mas estou fornecendo um link que cumpriu os eventos importantes no Magento2
http://cyrillschumacher.com/magento2-list-of-all-dispatched-events/
Claro que a lista de eventos está incompleta, como se você tivesse trabalhado com o Magento 1.x, a lógica de envio de eventos é mantida.
lib/internal/Magento/Framework/Model/AbstractModel.php
Carregar eventos antes e depois de um modelo
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
$this->_eventManager->dispatch($this->_eventPrefix . '_load_after', $params);
Salvar eventos anteriores e posteriores de um objeto de modelo
$this->_eventManager->dispatch($this->_eventPrefix . '_save_before', $this->_getEventData());
$this->_eventManager->dispatch($this->_eventPrefix . '_save_after', $this->_getEventData());
Excluindo um objeto
$this->_eventManager->dispatch($this->_eventPrefix . '_delete_before', $this->_getEventData());
$this->_eventManager->dispatch($this->_eventPrefix . '_delete_after', $this->_getEventData());
Limpando um objeto
$this->_eventManager->dispatch($this->_eventPrefix . '_clear', $this->_getEventData());
Despacho do controlador
lib / internal / Magento / Framework / App / Ação / 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 renderização de layout de front-end
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
Coleções de Modelos
lib / internal / Magento / Framework / Modelo / 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]);
Existem muitos eventos desse tipo, e é uma combinação de eventos gerados explícita e implicitamente no Magento2.
As respostas acima funcionam perfeitamente, mas às vezes você precisa saber quais eventos são lançados em um carregamento de página específico e a ordem em que são lançados.
Portanto, aqui está a melhor maneira (na minha opinião, de saber isso), use xDebug e defina um ponto de interrupção na linha 56 da classe Magento\Framework\Event\Manager
(está na lib
pasta e não na app
pasta).
No seu depurador, diga para "Avaliar e registrar" a $eventName
variável e observe todos os eventos sendo exibidos no console enquanto você carrega a página.
Também recomendo desabilitar a opção "Suspender", pois pode haver centenas de eventos lançados; talvez seja necessário deixá-lo ativado para que o primeiro ponto de interrupção seja atingido e você pode removê-lo.
Por que eu acho que essa é a melhor maneira de obter todos os eventos despachados em um carregamento de página é porque isso também mostrará todos os eventos despachados pelos controladores. Cada controlador envia eventos antes e depois com nomes compostos contendo o FullActionName, RouteName e o padrão pós-distribuição. Veja a Framework\App\Action
classe no método dispatch () .
É difícil conhecer o evento em uma página específica. Assim, você pode tentar este código para rastrear os eventos que estão sendo chamados e usar o melhor para suas necessidades
/vendor/magento/framework/Event/Manager.php
adicione este código abaixo do nome do 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
Você pode verificar a lista em<magentoroot>/var/log/events.log
Você pode conferir abaixo o link dos eventos https://github.com/matinict/Magento-2-Events
Eu sofro que pessoas diferentes compartilhem eventos diferentes, mas nenhuma precisão perdi meu tempo, finalmente, apenas truques vão para o seu fornecedor de magento 2, verifique etc / event.xml