7.5.1. 소개

Zend_Controller_Action은 모델 - 뷰 - 컨트롤러(MVC) 패턴에 의거한 웹애플리케이션을 개발할 때, 프론트 컨트롤러로 사용하는 액션 컨트롤러를 구현하기 위한 추상 클래스입니다.

Zend_Controller_Action를 사용하려면 , 실제 액션 컨트롤러내에 서브 클래스(또는 액션 컨트롤러를 위해 여러분 자신의 base 클래스를 생성하기 위한 서브 클래스)가 필요합니다. 가장 기본적인 운용은, 우선 서브 클래스를 생성하고, 여러분의 사이트에서 처리하고 싶은 다양한 액션에 대응하는 액션 메소드를 생성하는 것입니다. Zend_Controller의 경로 지정과 디스패치 처리는, 잠재적인 컨트롤러 액션으로써 여러분의 클래스 내에서 끝부분에 'Action'이라고 붙은 메소드를 자동으로 발견합니다.

예를 들어, 다음과 같이 정의된 클래스에 대해 얘기해 봅시다.


    class FooController extends Zend_Controller_Action
    {
        public function barAction()
        {
            // 처리할 내용
        }

        public function bazAction()
        {
            // 처리할 내용
        }
    }



위의 FooController 클래스 ('foo' 컨트롤러)는 두 개의 액션, 'bar'와 'baz'를 정의하고 있습니다.

물론 이외에도 많은 기능이 있습니다. 예를 들어 커스텀 초기화 액션, 액션이 지정되지 않을 경우(혹은 무효인 액션을 지정했을 경우)에 호출되는 기본 액션, 디스패치의 전후에 실행되는 훅, 다양한 도움말 메소드 등이 있습니다. 이 장에서는 액션 컨트롤러 기능의 개요를 설명합니다.




7.5.2. 객체의 초기화

여러분은 항상 액션 컨트롤러의 생성자를 오버라이드(override) 할 수도 있지만, 이것을 추천하지 않습니다. Zend_Controller_Action::__construct()는, 요청(request) 객체나 응답(response) 객체를 등록하는 등의 중요한 작업을 실시합니다. 또한, 프론트 컨트롤러로부터 넘겨받은 커스텀 호출 인수들의 처리도 수행합니다. 만약 생성자를 오버라이드(override) 해야만 한다면, 반드시 parent::__construct($request, $response, $invokeArgs)를 호출하시기 바랍니다.

초기화 작업을 커스터마이즈하기 위한 보다 적절한 방법은, init() 메소드를 사용하는 것입니다. 이것은, __construct()의 마지막 작업으로 일컬어 집니다. 예를 들어, 초기화시에 데이타베이스에 접속하고 싶으면 다음과 같이 합니다.


    class FooController extends Zend_Controller_Action
    {
        public function init()
        {
            $this->db = Zend_Db::factory('Pdo_Mysql', array(
                'host'     => 'myhost',
                'username' => 'user',
                'password' => 'XXXXXXX',
                'dbname'   => 'website'
             ));
        }
    }






7.5.3. 디스패치 전후의 상태

Zend_Controller_Action에는, 요청된 액션에 대한 책꽂이라고 불리는 두 개의 메소드, preDispatch()와 postDispatch()가 있습니다. 이것은 다양한 방법으로 활용할 수 있습니다. 예를 들면, 액션을 실행하기 전에 인증 정보나 ACL를 조사하거나(preDispatch() 내의 _forward()를 호출하면, 그 액션은 건너뜁니다), 생성된 컨텐츠를 전사이트의 템플릿으로 배치하거나(postDispatch()) 등을 할 수 있습니다.




7.5.4. 접근자

다양한 객체나 변수가 객체에 등록되어 있어 각각 접근자가 준비되어 있습니다.

요청(request) 객체 : getRequest()는 액션을 호출하는 데 사용하는 요청(request) 객체를 취득하는데 사용합니다.

응답(response) 객체 : getResponse()는 마지막 응답(response) 내용을 집계하는 응답(response) 객체를 취득하는데 사용합니다. 전형적인 사용법은 다음과 같습니다.


    $this->getResponse()->setHeader('Content-Type', 'text/xml');
    $this->getResponse()->appendBody($content);



호출 인수 :  프론트 컨트롤러는 라우터, 디스패처, 그리고 액션 컨트롤러에 매개변수를 보냅니다. 이러한 매개변수를 취득하려면, getInvokeArg($key)를 사용합니다. 또는, 모든 매개변수를 취득하려면 getInvokeArgs()를 사용합니다.

요청(request) 매개변수 : 요청(request) 객체는 _GET나_POST와 같은 요청(request) 매개변수, 또는 URL의 경로 정보에 설정된 매개변수도 수집합니다. 이것들을 취득하려면, _getParam($key) 또는 _getAllParams()를 사용합니다. _setParam()를 사용해서 요청(request) 매개변수를 설정할 수도 있습니다. 이것은, 추가적인 액션을 전송할 때 유용합니다.

매개변수가 존재하는지 아닌지를 조사할 경우(조건 분기 시에 유용), _hasParam($key)를 사용합니다.




7.5.5. 유틸리티 메소드

접근자 외에도, Zend_Controller_Action에는, 액션 메소드 내로부터 (또는 디스패치 전후로 부터) 공통 작업을 수행하기 위한 몇 개의 유틸리티 메소드가 준비되어 있습니다.

_forward($action, $controller = null, $module = null, array $params = null) : 다른 액션을 실행합니다. preDispatch() 내에서 호출되면, 현재 요청된 액션은 건너뛰고 새로운 액션을 실행합니다. 그 이외의 경우는, 현재의 액션의 처리를 끝마친 후에, _forward()에서 요청된 액션을 실행합니다.

_redirect($url, $code = 302) : 다른 위치로 리디렉트(redirect) 합니다. 이 메소드는 URL과 옵션인 HTTP 상태 코드를 가집니다.  리디렉트는 즉시 실행되고, 프로그램의 실행은 거기서 정지합니다.

상태 코드를 지정했을 경우는, 리디렉트시에 PHP header() 명령어로 넘겨집니다.







크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
2007/04/06 23:55 2007/04/06 23:55
trackback :: http://kkal3.net/trackback/83
[로그인][오픈아이디란?]
 이전  123456789 ... 49   다음