마 젠토 2 이벤트 목록


답변:


18

다음을 사용하여 Magento 2 이벤트 목록 을 작성했습니다.

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

이 목록은 정적 이벤트와 다이나믹의 두 부분으로 나뉩니다.

에서 여기에 정적 이벤트는 전체 이벤트 이름 등으로 정의 된 모든 이벤트는 다음과 같습니다

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

동적 이벤트는 런타임시 다음과 같이 페치 된 이벤트 이름으로 동적으로 정의 된 모든 이벤트입니다.

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

더 나은 독서를 위해 목록이 스프레드 시트에 있습니다. 경기 상황을 더 잘 이해하기 위해 경기 후 2 줄을 남겼습니다.

같은 목록은에서 검색을 찾을 수 있습니다 공식 젠토 2의 repo 에 대한_eventManager->dispatch


이 목록은 매우 유용하지만 불완전한 것 같습니다. 이벤트 sales_order_save_after내 현재 작업을 위해 매우 중요하다 예를 들어이없는 때 당신은 당신이 어떤이는 것을 느끼지 못할 REPO 젠토 (2)를 통해 검색 dispatch이에 대한 모든시 : github.com/magento/magento2/... 나는 아직 아무 생각이 없다 이러한 이벤트가 어떻게 전달되는지 목록에 포함시키는 것이 좋습니다!
Jey DWork

이벤트 이름이 존재하지 않는지 어떻게 알 수 있습니까? 아마 당신은 다른 이름으로 Magento 2에서 동등한 것을 찾고 있습니까?
mbalparda

우리가 같은 것에 대해 이야기하고 있는지 확실하지 않습니다. 이벤트 sales_order_save_after(하나의 예와 같이)가 목록 (및 검색)에 나타나지 않는 이유가 궁금합니다 . 동적 이벤트처럼 보이지도 않습니다. 그리고 더 완벽한 목록을 얻기 위해 그러한 이벤트를 포함시킬 수 있는지 여부와 방법을 생각했습니다. 그리고 분명히 내가 sales_order_save_after말할 수있는 한 Magento 2는 Magento 2 이벤트 에 대해서만 이야기하고 있습니다.
Jey DWork

14

분명히 좋은 습관은 아니지만 Magento2의 중요한 이벤트를 준수하는 하나의 링크를 제공하고 있습니다.

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

물론 Magento 1.x로 작업 한 것처럼 이벤트 디스패치 로직이 유지되는 것처럼 이벤트 목록이 불완전합니다.

  1. lib/internal/Magento/Framework/Model/AbstractModel.php 모델의 이벤트 전후에로드

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

    모델 객체의 이벤트 전후에 저장

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

    객체 삭제

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

    객체 지우기

    $this->_eventManager->dispatch($this->_eventPrefix . '_clear', $this->_getEventData());
  2. 컨트롤러 파견

    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. 프런트 엔드 레이아웃 렌더 이벤트

    $this->_eventManager->dispatch(
        'controller_action_layout_render_before_' . $this->_request->getFullActionName()
    );
  4. 모델 모음

    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]);

이러한 이벤트는 많으며 Magento2에서 명시 적 및 암시 적으로 생성 된 이벤트의 조합입니다.


좋은 물건! 모든 것을 한 곳에 담으려면 답을 합쳐야합니다. 어떻게 생각해?
mbalparda

당신의 대답도 자급 자족합니다
huzefam

1

위의 답변은 모두 훌륭하지만 때로는 특정 페이지로드에서 발생하는 이벤트와 발생하는 순서를 알아야합니다.

그래서 여기에 가장 좋은 방법이 있습니다 (제 생각에 xDebug를 사용 하고 클래스의 56 번째 줄Magento\Framework\Event\Managerlib폴더 를 설정하십시오 ( 폴더가 아닌 app폴더에 있습니다).

디버거에서 "평가 및 기록" 을 지시 하십시오.$eventName 변수 하고 페이지를로드 할 때 콘솔에 모든 이벤트가 표시되는지 확인하십시오.

또한 수백 개의 이벤트가 발생했을 수 있으므로 "일시 중단"옵션을 비활성화하는 것이 좋습니다. 첫 번째 중단 점에 도달 한 후 제거 할 수 있습니다.

이벤트 이름 중단 점 이것이 페이지로드에서 전달 된 모든 이벤트를 얻는 가장 좋은 방법이라고 생각하는 이유는 컨트롤러에 의해 전달 된 모든 이벤트를 보여주기 때문입니다. 각 컨트롤러는 FullActionName, RouteName 및 기본 postdispatch one을 포함하는 구성된 이름으로 이벤트 전후에 이벤트를 발송합니다. dispatch () 메소드 에서 Framework\App\Action클래스를 참조하십시오 .


0

어려운 이벤트가 특정 페이지에 알 수 있습니다. 따라서이 코드를 사용하여 호출되는 이벤트 를 추적 하고 필요에 가장 적합한 이벤트를 사용할 수 있습니다

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

이벤트 이름 아래에이 코드를 추가하십시오

$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

당신은 목록 을 확인할 수 있습니다<magentoroot>/var/log/events.log


-1

https://github.com/matinict/Magento-2-Events 이벤트 링크를 아래에서 확인할 수 있습니다

나는 다른 사람들이 다른 이벤트를 공유하지만 정확도가 마침내 나의 시간을 잃어 버리지 않는다는 고통을 겪고있다. 그냥 트릭은 magento 2 공급 업체 확인 etc / event.xml로 이동하십시오 .magento 2 개발자에게 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.