Open Source Project XpressEngine is? The CMS to help produce and publish content.
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
Package

Interception

by XEJapan posted Nov 22, 2015
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

Interception

개요

플러그인 개���자��� 플러그인에서 필요한 기능을 쉽게 구현하기 위해서는 XpressEngine 코어의 동작이 실행되는 시점에 플러그인이 끼어들어 코어의 행동을 바꾸거나 추���적인 행동을 할 수 있어야 합니다.

예를 들어, 사이트에 새���운 회원이 가입할 때, 가입한 회원에��� 가입���하 메일을 보내는 기능을 플러그인으로 만들고 싶다��, 코어가 회원���입을 처리할 때, 플러그인이 끼어들어 메일 전송 코드를 실행시���야 합니다.

이러한 '끼어들��' 기능을 일반적으로 hook 또는 event라고 칭합니다. XpressEngine1에서는 trigger라는 방식을 통해 끼어들기를 제공하였습니다.

XpressEngine3에서는 '끼어들��'�� 제공하기 위하여 AOP�� 제공합니다. AOP는 Aspect oriented programming의 약어입니다.

목적

Interception의 가장 큰 목적은 자유���운 코어 동작의 변경을 가능하도��� 하��� 위해서 입니다. 끼어들기의 타���이 되는 코드에서event나 trigger�� 수동으로 발생(fire)시키지 않아도 자유롭게 끼어들기��� 가능합니다.

사용법

기본적인 사용법을 예를 들어 설명하���습니다. 위의 예와 같이 코어가 회원���입을 처리할 때, 메일 전송 코드��� 실행되도��� 하기 위하여 intercept() 함수를 사용할 수 있습니다.

// 가입 축하 메일 보내�� 등록
intercept('Member@create', 'welcome_mail::send_mail', function($createMember, array $data) use ($mailer) {

    // 회원���입 코드를 실행
    $member = $createMember($data);

    // 메일 전송
    $mailer->sendWelcomeMail($member->email, $member->getDisplayName);

    // 회원���입 처리 결과 반환
    return $member;
});

intercept 함수의 원형은 아래와 같습니다.

intercept($pointCut, $name, Closure $advice)

파라메터

  • 첫���째 파라메터 첫���째 파라메터인 포인트��(pointcut)은 '끼어들��'�� 할 대상 메소드를 칭합니다. 위의 예에서Member@create에 해당합니다. 사용가능한 포인트컷의 목���은 링크�� 참조하세요.

  • 두���째 파라메터 AOP에서 '끼어들��'�� 하는 주체�� 어드���이저(Advisor)라고 합니다. 두���째 파라메터인 $name은 이 어드���이저의 '이름'을 칭합니다. 이 이름은 서��� 중복되��� 않아야 합니다. 해당 플러그인의 아이디(디렉토리명)�� 이름의 접두사로 사용하십시오. 위의 예에서는 welcome_mail::send_mail에 해당하며, welcome_mail이 플러그인 아이디에 해당합니다. ::을 사용하여 접두사�� 연결하십시오.

  • 세번째 파라메터 세번째 파라메터인 $advice는 '끼어들��'�� 한 후 실행될 코드입니다. 클로저��� 제공되어야 합니다. 이 클로저는 '끼어들��'�� 할 대상���드를 감싸고 있습니다.(데코레이터 패턴) 이 클로저의 내부에서는 항상 대상���드(이 클로저의 첫���째 파라메터)�� 호출해주어야 하며, 대상���드를 호출하기 전이나 후에 원하는 코드를 추���하여 실행시킬 수 있습니다. 위의 예에서는 회원���입 처리�� 한 후에 해당 회원에��� 메일을 전송하는 코드��� 추���되어 있습니다.

    이 클로저의 첫���째 파라메터는 대상 메소드입니다. 위의 예에서 $createMember가 이에 해당합니다. 클로저 내부에서 항상 이 대상 메소드를 호출해주어야 하며, 클로저는 대상 메소드의 리턴값을 다시 리턴해야 합니다. 물��� 리턴값을 변경해도 됩니다.

    두���째 파라메터부터는 대상 메소드��� 호출될 때 받은 파라메터�� 그대��� 전달받습니다. 위의 예에서는 $data에 해당하며, 가입할 회원의 정보가 담겨있습니다. 물��� 대상 메소드에 따라 파라메터의 수와 내용이 달라집니다.

    // 항상 대상���소드(첫���째 파라메터)�� 호출해주어야 한다.
    $member = $createMember($data);
    
    // 항상 대상���드의 반환���을 다시 반환해야 한다.
    return $member;

API

  • 보다 자세한 사용법은 API 문서를 참���하시기 바랍니다. API 문서

List of Articles
Category Subject Date Last Update
Package Captcha 2015.11.22 2015.11.22
Package Category 2015.11.22 2015.11.22
Package Comment 2015.11.22 2015.11.22
Package Config 2015.11.22 2015.11.22
Package Counter 2015.11.22 2015.11.22
Package Database 2015.11.22 2015.11.22
Package Document 2015.11.22 2015.11.22
Package DynamicField 2015.11.22 2015.11.22
View Elements FrontEnd 2015.11.22 2015.11.22
Package Http 2015.11.22 2015.11.22
Package Interception 2015.11.22 2015.11.22
XE3 Interception 가이드 2015.12.29 2015.12.29
Package Keygen 2015.11.22 2015.11.22
Package Media 2015.11.22 2015.11.22
Package Member 2015.11.22 2015.11.22
Package Menu 2015.11.22 2015.11.22
Components Module 2015.11.22 2015.11.22
Package Permission 2015.11.22 2015.11.22
Plug-in Plugin 2015.11.22 2015.11.22
View Elements Presenter 2015.11.22 2015.11.22
Board Pagination Prev 1 2 3 Next
/ 3