Events

메타커머스 솔루션의 이벤트 기능은 코어 파일을 수정하지 않고 내부 동작을 활용할 수 있는 방법을 제공합니다.

이벤트 포인트

메타커머스 프론트는 URL을 통하여 컨트롤러가 실행되면, URL과 동일한 이름으로 이벤트를 트리거(trigger)합니다.

컨트롤러 URL 이벤트명
http://www.meta-commerce.co.kr/controller/shop/cart controller/shop/cart
http://www.meta-commerce.co.kr/member/login member/login

컨트롤러별로 게시된 이벤트와 함께 통합하여 사용가능한 controllerviewController 이벤트도 함께 트리거합니다.

컨트롤러 URL 이벤트명
http://www.meta-commerce.co.kr/controller/shop/cart controller
http://www.meta-commerce.co.kr/member/login viewController

이 두가지의 이벤트를 활용하여 필요한 작업을 수행하십시오.

사용자 이벤트 정의

이벤트는 application/custom/event.php 파일 내에 정의합니다. 이벤트 라이브러리의 on() 메소드를 사용하여 이벤트가 트리거되었을때 작업할 내역을 등록 할 수 있습니다. 첫 번째 파라미터는 구독할 이벤트의 이름입니다. 두 번째 파라미터는 해당 이벤트가 발생했을 때 진행할 작업입니다.

아래 예에서는 controller/shop/cart 이벤트가 트리거될 때 등록된 익명함수(Closures)를 이용하여 작업을 수행합니다.

$this->event->on('controller/shop/cart', function($e) {
    $params = $e->getParams();
});

메타커머스는 application/custom/event.php을 이용하여 이벤트를 등록할 때 $type 변수에 현재 호출된 컨트롤러의 타입에 따라 viewController 또는 controller를 파라미터로 넘겨줍니다. 이를 활용하여 컨트롤러의 타입에 따라 선택적으로 이벤트를 정의하여 등록할 수 있습니다.

// 타입별 이벤트 정의
if($type == 'controller') {
    // controller/member/login 이벤트 정의
    $this->event->on('controller/member/login', function($e) {
        $params = $e->getParams();
        // ...
    });

    // controller/member/logout 이벤트 정의
    $this->event->on('controller/member/logout', function($e) {
        $params = $e->getParams();
        // ...
    });
} else if($type == 'viewController') {
    // shop/goodsList 이벤트 정의
    $this->event->on('shop/goodsList', function($e) {
        $params = $e->getParams();
        // ...
    });
}

// joinMemberWelcome 이벤트 정의
$this->event->on('joinMemberWelcome', function($e) {
    $params = $e->getParams();
});

우선 순위 설정

하나의 이벤트에 여러 작업을 등록 할 수 있으므로 이러한 작업이 호출되는 순서를 정의하는 방법이 필요합니다. on() 메서드의 세 번째 파라미터로 우선순위 값을 전달하여 호출되는 순서를 설정할 수 있으며, 이 숫자가 높을수록 먼저 실행됩니다. 기본값은 1이며 지정된 우선순위가 같다면 나열된 이벤트 순서에 따라 등록됩니다.

$this->event->on('controller/shop/cart', function($e) {
    $params = $e->getParams();
}, 25);

동일한 우선순위를 가진 이벤트는 등록된 순서대로 실행됩니다.

사용자 정의 이벤트 게시

이벤트 라이브러리의 trigger() 메서드를 사용하여 필요한 이벤트를 간단하게 트리거할 수 있습니다.

$this->event->trigger('MyEvent', ['parama1', 'param2']);

이벤트를 트리거할 때 두번째 파라미터로 이벤트 실행시 사용할 데이터를 배열로 넘겨줄 수 있습니다.