XE는 일반적으로 현재act가 실행모듈에 정의되어있지않으면 잘못된 요청이라고 판단하고 에러를 출력합니다.
참고로 모듈 Act는 각 모듈의 ./conf/module.xml파일에 정의합니다.
하지만 아래 두 가지경우중 하나라도 해당되면 해당 act를 가진 모듈을 현재 실행모듈로 교체하여 실행합니다.
- 현재act이름이 "Type + 모듈이름 + act이름" 형식으로 되어있고, standalone속성이 true인 경우
- 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)
{
......
}
오호라! 그간 들어만 봤는데 이제서야 어떤기능인지 알게 되었네요 감사합니다 !