2010-01-31 3 views
3

내 응용 프로그램 행복하게 개발의 오류, 모두 오류 및 예외를 처리합니다. 프로덕션 환경으로 전환하면 구성이 오류를 표시하지 않도록 설정된대로 빈 페이지가 반환됩니다. ZF에는 빈 페이지가 나타나지 않도록 애플리케이션에서 레이아웃을 사용하여 멋지게 포맷 된 '페이지를 찾을 수 없음'으로 방문자를 보내기위한 표준 방법이 있습니까? 미리 감사드립니다.젠드 프레임 워크 핸들 예외 정상적으로 생산 환경에서

답변

2

을 당신은 이미 당신이 요청하는 일을 할 수있을 것입니다 젠드 프로젝트를 생성하기 위해 CLI를 사용하는 보통합니다. 스크립트/view/errors/error.phtml이 phtml 파일이 될 경우 사용할보기를 만드는 데 사용할 수 있습니다.

당신이 젠드 프로젝트 울부 짖는 소리를 만들 CLI를 사용하지 않은 경우 생성 된 ErrorController이

<?php 

class ErrorController extends Nanaly_Controller 
{ 

    public function errorAction() 
    { 
     $errors = $this->_getParam('error_handler'); 

     switch ($errors->type) { 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: 

       // 404 error -- controller or action not found 
       $this->getResponse()->setHttpResponseCode(404); 
       $this->view->message = 'Page not found'; 
       break; 
      default: 
       // application error 
       $this->getResponse()->setHttpResponseCode(500); 
       $this->view->message = 'Application error'; 
       break; 
     } 

     // Log exception, if logger available 
     if ($log = $this->getLog()) { 
      $log->crit($this->view->message, $errors->exception); 
     } 

     // conditionally display exceptions 
     if ($this->getInvokeArg('displayExceptions') == true) { 
      $this->view->exception = $errors->exception; 
     } 

     $this->view->request = $errors->request; 
    } 

    public function getLog() 
    { 
     $bootstrap = $this->getInvokeArg('bootstrap'); 
     if (!$bootstrap->hasPluginResource('Log')) { 
      return false; 
     } 
     $log = $bootstrap->getResource('Log'); 
     return $log; 
    } 


} 

주 사용하지만 : 1.10.0

을 젠드 버전을 사용하여이 컨트롤러가 생성 및보기가해야 앞에서 언급 한 것과 동일한 위치에 배치하십시오.

+0

감사. 나는 CLI를 사용했고 모두 작동했다. error.phtml 파일을 편집하여 html 스타일을 추가하여 사이트의 나머지 부분과 동일한 모양과 느낌을 갖도록했다. 이것을 생산에서 작동하려면 나가야했습니다. error.phtml의 끝에. 건배, 마크 – ed103

2

는 사용자 지정 ErrorController, 예와 함께이 작업을 수행 할 수 있습니다

http://www.talkincode.com/a-useful-error-controller-class-for-zend-framework-applications-729.html

+0

감사합니다. 모양을 알려 드리겠습니다. – ed103

+0

좋은 클래스이지만 myurl/foo와 같은 ACL 목록에 지정되지 않은 url을 호출하면 동일한 문제가있는 것 같습니다. 치명적 오류 : 캐치되지 않은 예외 'Zend_Acl_Exception'메시지와 함께 'Resource 'foo'not found '/Users/marchampson/Sites/heavenlycakes/trunk/library/Zend/Acl.php:347 스택 추적 : # 0 ... 조금 더 있지만 주석 상자의 문자 수가 부족합니다. – ed103

+0

수정되었지만 누군가가 약간의 빛을 비출 수 있기를 바라면서이 일을 하루 더 열어 둡니다. 컨트롤러가 작동하는 것처럼 보입니다.하지만 ... 출구를 두어야했습니다. 명령은 내 error.phtml보기 파일의 끝에 있습니다. 거기서 멈추지 않으면 위의 치명적인 오류가 발생합니다. 어떤 아이디어? – ed103