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 |
컨트롤러별로 게시된 이벤트와 함께 통합하여 사용가능한 controller
와 viewController
이벤트도 함께 트리거합니다.
컨트롤러 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']);
이벤트를 트리거할 때 두번째 파라미터로 이벤트 실행시 사용할 데이터를 배열로 넘겨줄 수 있습니다.