7.7. 규정된 모듈러 디렉토리 구조의 사용
Zend Framework/7. Zend_Controller | 2007/04/11 23:57
7.7.1. 소개
규정된 모듈러 디렉토리 구조(The Conventional Modular directory structure)에 의해, 다양한 MVC 애플리케이션을 독립적인 단위로 정리할 수 있습니다. 또, 그것을 다양한 프론트 컨트롤러로 재사용할 수 있게 됩니다. 이 디렉토리 구조는 다음과 같이 됩니다.
docroot/
index.php
application/
controllers/
IndexController.php
FooController.php
blog/
controllers/
IndexController.php
models/
views/
news/
controllers/
IndexController.php
ListController.php
models/
views/
이 패러다임에서는 모듈명이 컨트롤러의 접두사로써 사용됩니다. 위의 예는 세 개의 모듈 컨트롤러 'Blog_IndexController', 'News_IndexController' 및 'News_ListController'를 포함하고 있습니다. 또한, 두 개의 글로벌 컨트롤러 'IndexController'와 'FooController'도 정의되어 있습니다. 이들은 네임스페이스에 속하지 않습니다. 이 디렉토리 구조는 이 장에서 예제를 위해 사용됩니다.
그러면, Zend Framework의 MVC 컴포넌트를 사용해 이러한 디렉토리 배치를 구현하려면 어떻게 하면 좋을까요?
7.7.2. 모듈 컨트롤러 디렉토리의 지정
모듈을 사용하기 위해 먼저, 프론트 컨트롤러에서 컨트롤러 디렉토리 목록의 설정 방법을 변경하는 것입니다. 기본적인 MVC계열에서는, setControllerDirectory()로 배열이나 문자열을 넘기거나, 또는 addControllerDirectory()로 경로를 넘겨주고 있었습니다. 모듈을 사용할 때는, 이러한 메소드 호출을 살짝 변경할 필요가 있습니다.
setControllerDirectory()에서는 연관 배열을 넘겨 줄 필요가 있습니다. 연관 배열의 키에는 모듈명, 그 값에는 디렉토리의 경로를 지정합니다. 특별한 키 'default'는 글로벌 콘트롤러(모듈 네임스페이스를 필요로 하지 않는 것)를 사용할 것입니다. 모든 엔트리는, 단일 경로를 가리키는 문자열 키를 포함해야만 합니다. 다음의 예와 같습니다.
$front->setControllerDirectory(array(
'default' => '/path/to/application/controllers',
'blog' => '/path/to/application/blog/controllers'
));
addControllerDirectory()에서는, 옵션의 두번째 인수를 받아들입니다. 모듈을 사용할 때, 두번째 인수로써 모듈명을 넘겨줍니다. 지정하지 않으면, 경로는 기본 네임스페이스에 추가됩니다. 다음의 예와 같습니다.
$front->addControllerDirectory('/path/to/application/news/controllers', 'news');
7.7.3. 모듈로 경로 지정
Zend_Controller_Router_Rewrite의 기본 경로는 Zend_Controller_Router_Route_Module형의 객체입니다. 이 경로는 다음의 경로 지정 스키마들 중 하나를 선택합니다.
:module/:controller/:action/*
:controller/:action/*
바꾸어 말하면, 그들 자신이나 접두어로 쓰인 모듈에 의해 컨트롤러와 액션을 일치시킵니다. 이 규칙은, 프론트 컨트롤러와 디스패처에게 넘겨진 컨트롤러 디렉토리 배열에서 동일한 이름의 키가 존재할 경우에만 모듈은 일치될 것이라는 것을 의미합니다.
7.7.4. 모듈 또는 글로벌 기본 컨트롤러
기본 라우터에서는, 컨트롤러가 URL에 지정되지 않았던 경우에는 기본 컨트롤러(특히 지정하지 않으면 IndexController)를 사용합니다. 모듈 컨트롤러를 가지고, 만약 모듈은 지정했지만 컨트롤러를 지정하지 않았으면, 디스패처는 먼저 모듈 경로내의 기본 컨트롤러를 찾습니다. 그리고나서, 글로벌 네임스페이스 'default'에 있는 기본 컨트롤러를 찾습니다.
만약 여러분이 글로벌 네임스페이스에 항상 default로 하고 싶으면, 프론트 컨트롤러에서 useGlobalDefault 매개변수를 지정합니다.
$front->setParam('useGlobalDefault', true);
태그 : zend framework
trackback :: http://kkal3.net/trackback/87




