출처 : http://www.yiiframework.com/doc/guide/1.1/en/basics.module
Module
- Creating Module
- Using Module
- Nested Module
모듈은 models, view, controllers 와 서포팅 컴포넌트 가 포함되어 있는 소프트웨어 단위입니다. 여러 측면에서 어플리케이션과 유사합니다.차이점은 모듈은 혼자서 있을 수 없고 어플리케이션 안에서 있어야 합니다. 사용자는 어플리케이션 컨트롤러 처럼 모듈 컨트롤러를 액세스 할 수 있습니다.
모듈은 여러 시나리오에서 유용하게 사용합니다. 큰 응용프로그램에서 여러 모듈로 나누고 개발과 유지 관리를 각각 관리 합니다. 일반적으로 사용하는 기능은 미래의 프로젝트에 사용자 관리, 댓글 관리, 개발을 쉽게 다시 사용 할 수 있습니다.
1. Creating Module
Module의 구성은 디렉토리 이름이 고유한 ID로 제공 됨으로써 어플리키이션 디렉토리와 비슷합니다.
forum이라는 이름을 가진 디렉토리의 구성입니다.
forum/
ForumModule.php the module class file
components/ containing reusable user components
views/ containing view files for widgets
controllers/ containing controller class files
DefaultController.php the default controller class file
extensions/ containing third-party extensions
models/ containing model class files
views/ containing controller view and layout files
layouts/ containing layout view files
default/ containing view files for DefaultController
index.php the index view file
모듈은 CWebModule에서 학인 모듈 클래스를 가지고 있어야 한다.클래스의 이름은 ucfirst($id).'Module' 이런식으로 사용합니다. $id는 모듈 ID(또는 디렉토리 이름) 을 뜻합니다. 모듈 클래스는 모듈코드간의 정보를 공유하기위한 중간 위치에서 역할을 하고 있습니다. 예를들어 CWebModule::params 사용하여 저장하고 CWebModule::components를 사용하여 어플리케이션의 컴포넌트를 공유할 수 있습니다.
:: tip :: Gii 를 사용해서 모듈의 기본 골격을 만들 수 있습니다.
2.Using Module
모듈을 사용하려면 먼저 어플리케이션 기본 디렉토리 아래 모듈 디렉토리를 사용합니다. 그다음 어플리케이션의 모듈 속성을 모듈 ID로 선언합니다. 예를들어 포럼 모듈을 사용하려면 다음과 같이 어플리케이션 구성을 합니다.
return array( ...... 'modules'=>array('forum',...), ...... );
초기 속성 값을 갖는 모듈을 구성 할 수 있습니다. 사용방법은 어플리케이션 컴포넌트를 구성하는 방법과 매우 유사합니다. 예를 들면 포럼 모듈은 postPerPage라는 이름을 갖는 속성이 어플리케이션 구성에서 있을 수 있습니다.
return array( ...... 'modules'=>array( 'forum'=>array( 'postPerPage'=>20, ), ), ...... );
모듈 인스턴스틑 현재 활성화 된 컨트롤러의 모듈 속성을 통해 액세스 할 수 있습니다. 모듈 인스턴스를 통해서 다음 모듈 레벨에서 공유되는 정보를 액세스 할 수 있습니다. 예를들면 postPerPage의 정보를 액세스 하기 위해서 다음과 같이 사용합니다.
$postPerPage=Yii::app()->controller->module->postPerPage; // or the following if $this refers to the controller instance // $postPerPage=$this->module->postPerPage;
모듈에서 컨트롤러 에서 다음의 작업 경로를 통해 액세스 할 수 있습니다.moduleID/controllerID/actionID. 예를들어 포럼 모델 컨트롤러의 이름이 PostController라고 가정 한다면 rote forum/post/create 에서 경로를 생성 할 수있습니다. 이결로에 해당하는 URL은 http://www.example.com/index.php?r=forum/post/create. 입니다.
::tip:: 컨트롤러가 하위 디렉토리인 컨트롤러의 경우에도 같은 경로를 사용 할 수 있습니다. 예를들면forum/controllers/admin 아래 PostController 라고 가정한다면 forum/admin/post/create. 로 만들 수 있습니다.
3. Nested Module
모듈은 무제한 레벨에서 중첩할 수 있습니다. 즉, 모듈은 또다른 모듈을 포함한 모듈을 포함 할 수 있습니다. 하위 자식 모듈은 상위 부모 모듈을 호출 합니다. 자식 모듈은 부모모듈 속성에 선언 되어야 합니다.
자식 모듈 컨트롤러 액션에 엑세스하려면 다음 경로르 사용합니다. parentModuleID/childModuleID/controllerID/actionID.