Magento 2 lista de eventos

Respostas:

18

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

mbalparda
fonte
A lista é muito útil, mas parece incompleta. O evento, sales_order_save_afterpor 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!
Jey Dwork
Como você sabe que o nome do evento não existe? Talvez você esteja procurando um equivalente no Magento 2 com outro nome?
Mbalparda
Não tenho certeza se estamos falando sobre a mesma coisa. Eu só estava me perguntando por que o evento 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.
Jey Dwork
14

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.

  1. 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());
  2. 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
  3. Eventos de renderização de layout de front-end

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

huzefam
fonte
Coisa boa! Devemos mesclar nossas respostas para ter tudo em um só lugar. O que você acha?
Mbalparda #
bem sua resposta também é auto-suficiente
huzefam
1

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 libpasta e não na apppasta).

No seu depurador, diga para "Avaliar e registrar" a $eventNamevariá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.

Ponto de interrupção dos nomes de eventos 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\Actionclasse no método dispatch () .

drew7721
fonte
0

É 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

Priyank
fonte
-1

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

matinict
fonte