Magento 2에 전체 이벤트 목록이 있습니까? 마 젠토 이벤트 치트 시트 (1.9) 와 같은 것을 찾고 있습니다.
Magento 2에 전체 이벤트 목록이 있습니까? 마 젠토 이벤트 치트 시트 (1.9) 와 같은 것을 찾고 있습니다.
답변:
다음을 사용하여 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/... 나는 아직 아무 생각이 없다 이러한 이벤트가 어떻게 전달되는지 목록에 포함시키는 것이 좋습니다!
sales_order_save_after
(하나의 예와 같이)가 목록 (및 검색)에 나타나지 않는 이유가 궁금합니다 . 동적 이벤트처럼 보이지도 않습니다. 그리고 더 완벽한 목록을 얻기 위해 그러한 이벤트를 포함시킬 수 있는지 여부와 방법을 생각했습니다. 그리고 분명히 내가 sales_order_save_after
말할 수있는 한 Magento 2는 Magento 2 이벤트 에 대해서만 이야기하고 있습니다.
분명히 좋은 습관은 아니지만 Magento2의 중요한 이벤트를 준수하는 하나의 링크를 제공하고 있습니다.
http://cyrillschumacher.com/magento2-list-of-all-dispatched-events/
물론 Magento 1.x로 작업 한 것처럼 이벤트 디스패치 로직이 유지되는 것처럼 이벤트 목록이 불완전합니다.
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());
컨트롤러 파견
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
프런트 엔드 레이아웃 렌더 이벤트
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
모델 모음
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에서 명시 적 및 암시 적으로 생성 된 이벤트의 조합입니다.
위의 답변은 모두 훌륭하지만 때로는 특정 페이지로드에서 발생하는 이벤트와 발생하는 순서를 알아야합니다.
그래서 여기에 가장 좋은 방법이 있습니다 (제 생각에 xDebug를 사용 하고 클래스의 56 번째 줄Magento\Framework\Event\Manager
에 lib
폴더 를 설정하십시오 ( 폴더가 아닌 app
폴더에 있습니다).
디버거에서 "평가 및 기록" 을 지시 하십시오.$eventName
변수 하고 페이지를로드 할 때 콘솔에 모든 이벤트가 표시되는지 확인하십시오.
또한 수백 개의 이벤트가 발생했을 수 있으므로 "일시 중단"옵션을 비활성화하는 것이 좋습니다. 첫 번째 중단 점에 도달 한 후 제거 할 수 있습니다.
이것이 페이지로드에서 전달 된 모든 이벤트를 얻는 가장 좋은 방법이라고 생각하는 이유는 컨트롤러에 의해 전달 된 모든 이벤트를 보여주기 때문입니다. 각 컨트롤러는 FullActionName, RouteName 및 기본 postdispatch one을 포함하는 구성된 이름으로 이벤트 전후에 이벤트를 발송합니다. dispatch () 메소드 에서 Framework\App\Action
클래스를 참조하십시오 .
그 어려운 이벤트가 특정 페이지에 알 수 있습니다. 따라서이 코드를 사용하여 호출되는 이벤트 를 추적 하고 필요에 가장 적합한 이벤트를 사용할 수 있습니다
/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
https://github.com/matinict/Magento-2-Events 이벤트 링크를 아래에서 확인할 수 있습니다
나는 다른 사람들이 다른 이벤트를 공유하지만 정확도가 마침내 나의 시간을 잃어 버리지 않는다는 고통을 겪고있다. 그냥 트릭은 magento 2 공급 업체 확인 etc / event.xml로 이동하십시오 .magento 2 개발자에게 도움이되기를 바랍니다.