안녕하세요. 모듈 개발을 해보고 있습니다. 모듈 작동 매커니즘은 어느정도 이해되었고, 다른 모듈과 연동할 경우 어디에 어떻게 끼어들어야 되며, 아래 코드 부분중 밑줄 그은 부분들을 어디서 확인할수 있는지 몰라서 문의드립니다.

 

<eventHandlers>
        <eventHandler after="document.insertDocument" class="Controllers\EventHandlers" method="afterInsertUpdateDocument" />

        <eventHandler before="member.insertMember" class="Controllers\EventHandlers" method="beforeInsertMember" />
</eventHandlers>

 

document 는 문서모듈 , insertDocument 는 문서 모듈 컨트롤러에서 정의한 메서드 , 그리하여 document.insertDocument 로 작성하는거고, after= 또는 before= 로 시점을 표시하고... 이런식이라면 모든 다른 모듈의 임의 메서드를 위처럼 전부 끼어들수 있는건가요? 

 

아니라면 현재 최신 라이믹스에서 끼어들수 있는 부분을 확인할수 있는 가이드나 방법이나 이벤트핸들러에 대한 더 자세한 설명을 확인할수 있는 문서같은것들이 있을까요? 

 

이벤트 핸들러에 대한 고수분들의 설명부탁드립니다. 감사합니다.

 

  • ? Lv2
    모듈의 트리거는 각 모듈들에서 셀프로 지정합니다.
    저는 이렇게 합니다.

    1. 원하는 기능을 담당하는 모듈에 들어갑니다.
    2. ModuleHandler::triggerCall 을 검색합니다.
    3. 있으면 관련 기능을 module.xml에 본문에 적어주신것처럼 작성합니다.

    별도로 display, moduleHandler.init, moduleHandler.proc, moduleObject.proc과 같은 트리거들도 존재합니다.
  • ? Lv2 Lv5
    답변 감사합니다.
    "ModuleHandler::triggerCall 을 검색" 하는것과 아래 람보님이 적어주신 "ModuleHandler::triggerCall 함수를 호출이 되는 트리거에 한해서" 이 두 부분을 결합해서 보니 아리송했던 부분을 이젠 이해되는 같습니다.

    "별도로 display, moduleHandler.init, moduleHandler.proc, moduleObject.proc과 같은 트리거" 들은 어떻게 사용하시는 간단히 여쭤봐도 될까요?
  • Lv5 Lv24
    <eventHandler after="display" class="Controllers\EventHandlers" method="beforeDisplayTrigger" />

    그냥 종류가 있는 것들이고 display는 displayHandler 클래스 안에 있는 것이고,
    해당 위의 4가지 모두 classes 폴더 안에 있는 php파일 안에서 호출되는 항목들이니 그쪽을 살펴보시기 바랍니다.
  • Lv24 Lv5
    감사합니다.
  • Lv24
    https://github.com/rhymix/rhymix/blob/master/modules/document/document.controller.php#L700
    https://github.com/rhymix/rhymix/blob/master/modules/document/document.controller.php#L901

    이와 같이 트리거를 호출하는 곳에서 해당 트리거를 ModuleHandler::triggerCall 하게되면 거기에 선언한 모든 트리거 함수들을 불러와 모두 하나씩 순차적으로 실행해줍니다.

    보통 이름은 모듈이름.함수명 으로 하는것이 관행이라 document.insertDocument 와 같이 이름을 잡아두고 있어요.

    그래서 아무 함수에서나 사용이 가능할 것으로 보여지지만 그렇지는 않고, 제가 위에 링크한 줄의 코드처럼 ModuleHandler::triggerCall 함수를 호출이 되는 트리거에 한해서 다른모듈들의 해당 트리거의 함수를 호출할 수 있는 방식이 되므로 사용에 유의해주셔야 합니다.
  • Lv24 Lv5
    답변 감사합니다.

    $output = ModuleHandler::triggerCall('document.insertDocument', 'before', $obj); 처럼 명시적으로 해당모듈에 작성한 코드가 있어야 트리거가 되는걸로 이해했습니다.

    그렇다면 제가 개인적으로 만드는 모듈도 ModuleHandler::triggerCall('트리거명, 'before', $obj); 처럼 지정해주면 , 다른 사람들도 이것을 확인하여 끼여들수 있다는 뜻이지요?
  • Lv5 Lv24
    네 맞습니다.
  • Lv24 Lv5
    감사합니다!