XpressEngine의 모든 입력과 출력은 index.php를 통해서 이루어집니다.
입력된 요청을 분석후 대상 Module을 찾은 후 그 Module의 어떤 동작을 해야 하는지 결정하는 것이 Action입니다.
보통 이 동작을 결정하는 Action은 Request Argument의 $act 변수값을 이용합니다..
이 Action에 대한 선언은 모듈의 ./conf/module.xml에 정의되어 있습니다.
Action 명세
<?xml version="1.0" encoding="utf-8"?>
<modules>
<grants />
<permissions />
<actions>
<action name="dispFileAdminList" type="view" admin_index="true" standalone="true" />
<action name="dispFileAdminConfig" type="view" standalone="true" />
<action name="procFileUpload" type="controller" standalone="true" />
<action name="procFileDownload" type="controller" standalone="true" />
<action name="procFileAdminDeleteChecked" type="controller" standalone="true" />
<action name="procFileAdminInsertConfig" type="controller" standalone="true" />
</actions>
</modules>Action은 $act 라는 변수를 통해서 호출할 수 있습니다.
호출은 GET/ POST/ JSON/ XMLRPC 어떤 경우에도 act라는 이름을 이용하게 됩니다.
예) editor 모듈의 dispEditorPopup() 호출 (./modules/editor/editor.view.php)
?module=editor&act=dispEditorPopup&editor_sequence=1&component=image_editor
일반적으로 XE의 Action은 모듈에 귀속됩니다.
즉 별다른 지시가 없을 경우 $act 변수에 의해 Action이 호출되면 현재 동작중인 모듈의 Action으로 인정이 되어 실행됩니다.
하지만 경우에 따라서 현재 동작중인 모듈이 아닌 다른 모듈의 Action이 호출될 경우가 있습니다.
대표적인 예가 RSS 모듈입니다.
rss라는 Action은 게시판 모듈에서 정의된 Action이 아니지만 Action Forward 기능을 통해 호출되어 실행이 됩니다.
?mid=board&act=rss
Action Forward는 모듈 독립적인 기능을 수행하기를 원할때 사용할 수 있습니다.
위와 같은 요청의 경우 board 라는 mid를 찾게 되고 이 mid가 게시판 모듈의 mid일 경우 rss라는 Action이 없습니다.
이럴 경우 XE는 Action Forward 등록된 것중에 rss라는 것이 있는지 찾게 됩니다.
rss라는 Action은 RSS모듈의 View type으로 DB에 등록이 되어 있어서 XE는 board라는 mid의 정보를 모두 설정하고 나서 RSS 모듈의 View 객체를 생성해서 rss method를 실행하게 됩니다.
이 Action Forward는 현재 요청된 모듈의 레이아웃이나 정보를 유지한채 다른 동작을 원할 경우 필요합니다.
다른 예로 친구 목록을 보는 Action은 Communication 모듈의 dispCommunicationFriend 라는 Action으로 동작을 합니다.
이 Action은 현재 보고 있는 모듈의 레이아웃등을 그대로 유지한채 내용을 친구 목록으로 대체합니다.
즉 컨텐츠 영역을 약속된 Action에 따라서 바꾸어서 출력할 수도 있고 요청된 모듈의 정보를 바탕으로 다른 결과를 유도할 수도 있는 기능입니다.
Action Forward의 등록
보통 Action Forward는 모듈.class.php 에서 moduleInstall() 시에 저장이 됩니다.
아래와 같이 등록할 수가 있습니다.
Action Forward의 검증
Action Forward가 잘 등록되었는지는 아래와 같은 코드로 확인할 수가 있고 보통 모듈.class.php의 checkUpdate() method에서 이용됩니다.
Action Forward의 삭제
Action Forward가 필요 없을 경우 삭제하기 위한 용도로 이용됩니다.
그 외 Action의 이름이 (disp|proc|get)모듈 이름과 같이 이루어진 경우가 아닐 경우 Action Forward를 등록해야 합니다.
standalone
셋째 줄 standalone이 false로 되어 있어야 mid가 없을 때 에러가 출력되는 게 아닐까요?
이런 기초적인 걸 공부해야 하는 건 저뿐인가; 아무도 댓글을 안다시네..,; 아니면 이것도 혹시 제가 틀린건가요 ㄱ-...
+ 만약 제가 틀린거라 하더라도 그렇다면 저거 바꿔야 하지 않나요.. standalone이 true면 mid에 독립할 수 있는 걸로 보는게 더 시멘틱한데 말입니다,??
permissions설명이 빠졋어요...
추가해주세요...