2012-02-04 2 views

답변

4

다음 방법을 사용하면 특정 모듈에 대한 오류 처리기를 비활성화 할 수 있습니다. 이 예에서는 RESTful 모듈 rest을 호출 할 것입니다.

먼저 애플리케이션에 새 플러그인을 만드십시오. 예를 들어, Application_Plugin_RestErrorHandler이됩니다. rest 모듈에 대한 모듈의 부트 스트랩에, application/plugins/RestErrorHandler.php

class Application_Plugin_RestErrorHandler extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     $module = $request->getModuleName(); 

     // don't run this plugin unless we are in the rest module 
     if ($module != 'rest') return ; 

     // disable the error handler, this has to be done prior to dispatch() 
     Zend_Controller_Front::getInstance()->setParam('noErrorHandler', true); 
    } 
} 

다음에 다음 코드를 추가, 우리는 플러그인을 등록합니다. 이것은 modules/rest/Bootstrap.php에 있습니다. 모든 모듈 부트 스트랩은 현재 모듈에 관계없이 실행되기 때문에 메인 부트 스트랩에 들어갈 수 있지만 특정 모듈과 관련된 플러그인을 해당 모듈의 부트 스트랩에 등록하고 싶습니다.

protected function _initPlugins() 
{ 
    $bootstrap = $this->getApplication(); 
    $bootstrap->bootstrap('frontcontroller'); 
    $front = $bootstrap->getResource('frontcontroller'); 

    // register the plugin 
    $front->registerPlugin(new Application_Plugin_RestErrorHandler()); 
} 

또 다른 가능성은 오류 처리기를 유지하지만 모듈 특정 오류 처리기를 사용하는 것입니다. 이렇게하면 rest 모듈의 오류 처리기가 다르게 동작하여 REST 친화적 인 오류가 출력 될 수 있습니다.

이렇게하려면 ErrorController.phpmodules/rest/controllers/ErrorController.php으로 복사하고 클래스 이름을 Rest_ErrorController으로 바꿉니다. 그런 다음 오류 컨트롤러의보기 스크립트를 modules/rest/views/scripts/error/error.phtml으로 복사하십시오.

error.phtml을 원하는대로 사용자 정의하여 오류 메시지가 나머지 모듈에서 사용하는 것과 동일한 JSON/XML 형식을 사용하도록하십시오.

그런 다음 위의 플러그인을 약간 조정할 것입니다. Zend_Controller_Front가 기본 모듈 대신 rest 모듈에서 ErrorController :: errorAction을 사용하도록 지시합니다. 원하는 경우 ErrorController와 다른 컨트롤러를 사용할 수도 있습니다. 플러그인을 다음과 같이 변경하십시오.

위의 방법을 사용하면 여전히 부트 스트랩에 플러그인을 등록해야합니다.

희망이 있습니다.

+0

감사합니다. 덕분에 많은 도움이되었습니다. 예외가 throw 될 때 오류 XML 응답 만 표시하려고합니다. –

+0

그럴 경우 두 번째 방법을 사용하고 싶습니다. 그렇지 않으면 예외가 전면 컨트롤러로 돌아가고 오류 처리가 해제 된 상태에서 궁극적으로 예외를 PHP와 프로덕션 환경으로 던져 버릴 것이라고 생각합니다. 보통 500 개의 서버 오류가 발생합니다. 모듈에 대한 오류 처리기를 설정하면 가짜 사용자 입력으로 인해 발생하지 않은 경우 컨트롤러가 예외를 기록하도록하고 오류보기 스크립트는 오류 상태를 나타내는 XML 응답을 무조건적으로 표시 할 수 있습니다. – drew010

+0

조금 더 생각해 보면 기본 모듈의 기본 오류 처리기를 사용할 수 있으며 현재 모듈을 ErrorController의보기에 할당하고 모듈이 휴식 상태 일 때 XML을 표시하거나 오류가 발생할 수 있습니다 컨트롤러는 error.xml.phtml 또는 이와 비슷한 것을 렌더링합니다. – drew010

관련 문제