XpressEngine

[기초] XE구조의 비밀 그 여섯번째 - 간단한 act이름을 외치다. "Action Forward"

XE는 일반적으로 현재act가 실행모듈에 정의되어있지않으면 잘못된 요청이라고 판단하고 에러를 출력합니다.

참고로 모듈 Act는 각 모듈의 ./conf/module.xml파일에 정의합니다.

하지만 아래 두 가지경우중 하나라도 해당되면 해당 act를 가진 모듈을 현재 실행모듈로 교체하여 실행합니다.

  1. 현재act이름이 "Type + 모듈이름 + act이름" 형식으로 되어있고, standalone속성이 true인 경우
  2. Action Forward에 현재 act이름이 등록된 경우

이것이 바로 "Action Forward" 기능입니다.

Action Forward기능은 한마디로 현재 실행모듈의 act가 아닌 다른모듈의 act를 실행하는 기능입니다.


그리고 XE는 mid,document_srl,module으로 실행모듈정보를 불려온 뒤 act이름을 검사함으로 실행모듈이 교체되더라도 앞에서 이미 불려온 실행모듈정보는 남게 됩니다.

그 실행모듈정보가지고 레이아웃이 구성되므로, 교체전 실행모듈의 레이아웃도 그대로 남게됩니다.


예를 들어, 아래의 URL로 접속한다고 합시다.

https://conory.com/index.php?mid=blog&act=dispMemberInfo


mid=blog는 실행모듈이고,

act=dispMemberInfo는 member모듈의 act입니다.


먼저 mid=blog를 검사하여 모듈정보를 불려옵니다. 이때 불려온 모듈정보는 뒷과정에서 활용하기위해 변수에 저장합니다.

그리고 act=dispMemberInfo를 검사하여 member모듈의 act인것을 알아냅니다.

여기서 XE는 실행모듈 mid=blog 을 member모듈로 교체하고 해당 act를 실행합니다. ("Action Forward" 기능)

그리고 앞 과정에서 저장한 mid=blog의 모듈정보를 활용해 레이아웃을 구성합니다.

이렇게 하면 레이아웃은 mid=blog 모듈을 따르고, 실행은 act=dispMemberInfo 가 실행되는 형태가 되지요...



간단한 Act 이름 짓기 (Action Forward등록)

그리고 Action Forward에 act이름을 등록하면 act이름을 "Type + 모듈이름 + act이름" 형식으로 쓰지않아도 되고, 간단하게 원하는 이름으로 할 수 있습니다. 

(근데 Action Forward등록은 의외로 많이 사용하지않는 기능입니다. act이름을 줄일 수 있는 기능인데 말이지요.. )


* Action Forward등록

보통 모듈설치시(moduleInstall()) Action Forward 등록을 합니다.

$oModuleController = getController('module');

$oModuleController->insertActionForward('모듈이름', '클래스타입 (ex.view)', '등록할 act이름');


* Action Forward등록확인

아래 코드로 해당 act가 등록되었는 지 확인할 수 있습니다.

$oModuleModel = getModel('module');

if($oModuleModel->getActionForward('act이름')){

//이미 등록됨

}


* Action Forward제거

모듈삭제나 더 이상 필요없어진 Action Forward제거합니다

$oModuleController = getController('module');

$oModuleController->deleteActionForward('모듈이름', '클래스타입 (ex.view)', '제거할 act이름');



※ [Action Forward 활용] RSS Act

rss모듈에는 어느모듈에서든지 rss를 볼 수 있도록 rss act를 Action Forward등록합니다.

바로 아래URL처럼 사용할 수 있습니다.

https://conory.com/index.php?mid=blog&act=rss


rss.class.php 파일 15줄 function moduleInstall()

$oModuleController = getController('module');

$oModuleController->insertActionForward('rss', 'view', 'rss');


으로 Action Forward등록!!


rss.view.php 파일 27줄

function rss($document_list = null, $rss_title = null, $add_description = null)

{

......

}



  • ?
    날아라 2014.03.03 13:38:31

    오호라! 그간 들어만 봤는데 이제서야 어떤기능인지 알게 되었네요 감사합니다 !

  • ?
    다이오니 2015.02.02 01:18:36
    강의 정주행 하고 있는데 완전 찰지네요 ㅋㅋ 재밌습니다~
?