[CakePHP] Error페이지 설정


Study/PHP  2019. 10. 12. 17:03

안녕하세요. 명월입니다.


이 글은 CakePHP에서 Error 페이지 설정하는 방법에 대한 글입니다.


CakePHP를 사용하면 Debug모드에서 에러가 발생하게 되면 아래와 같은 화면이 나옵니다.

물론 이 화면은 프로그램을 개발할 때 Stack 추적 역할을 하기 때문에 매우 유용한 정보입니다. 그러나 우리가 개발이 끝나고 본 서버로 전환할 경우 에러가 발생할 때 위와 같은 화면이 나오면 큰일 나겠습니다.

첫째는 소스의 내용이 다 보여지는 형태이고 또 사용자 입장에서는 이런 에러 페이지는 사이트의 신뢰도를 떨어 트릴 수 있기 때문입니다.


그래서 에러가 발생되면 에러가 발생했습니다 하는 페이지로 전환하여야 합니다.

먼저 config 폴더의 app.php 파일을 확인합니다.

그럼 Debug 설정에 대한 화면이 있습니다. 여기를 true에서 false로 바꿉니다.

그럼 위와 같은 화면이 나오는데.. 일단은 Stack 추적의 화면은 없어졌네요. 그럼 이제 이 에러 페이지를 꾸며야 하는데(?) 그 설정입니다.

먼저 View폴더의 AppView.php를 수정해야 합니다.

이 부분을 예전에 Smarty설정할 때 설정한 적이 있습니다.

링크 - [CakePHP] MVC 프레임워크 Cake를 설치하는 방법

...
protected function _evaluate($viewFile, $dataForView) {
  // error 페이지일 경우
  if(@$dataForView["error"] !== null){
    if(Configure::read('debug')){
      // 그 모드가 debug 모드일 경우 기본 CakePHP의 Stack 추적 페이지가 나오도록 한다.
      $this->layout = 'dev_error';
      return parent::_evaluate($viewFile, $dataForView);
    } else {
      // 그 모드가 debug 모드가 아닐 경우 layout을 error 페이지로 설정한다.
      $this->layout = "error";
    }
  }
  foreach ($dataForView as $key => $val) {
    $this->_smarty->assign($key, $val);
  }
  $this->_smarty->assignByRef('this', $this);
  $_csrfToken = $this->getRequest()->getCookie("csrfToken");
  if($_csrfToken === null){
    $_csrfToken = $this->getResponse()->getCookie("csrfToken")["value"];
  }
  $this->_smarty->assign("_csrfToken", $_csrfToken);
  return $this->_smarty->fetch($viewFile);
}
...

위 소스를 보면 error일 경우와 debug모드가 아닐 경우에는 레이아웃 error페이지를 열라고 했습니다.

errer 페이지는 각 에러 타입 별로 다르게 만들어도 상관은 없으나 보통은 한 화면에 통일을 합니다. 그러므로 우리는 error 레이아웃만 수정하고 파생 레이아웃은 무시해 줍니다.

기존의 디폴트로 이것저것 많이 쓰여 있네요. 깨끗히 지우고 에러 페이지를 만듭니다.

굳이 에러 타입별로 바꾸고 싶으면 저 메시지 정도만 바꾸면 됩니다. 메세지는 AppView.php에서 수정합니다.

여기까지 CakePHP에서 Error 페이지 설정하는 방법에 대한 글이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.