2012-11-23 2 views
1

내 의견 제출 양식 중 하나에 보안 구성 요소가 있습니다. 이제 무언가가 잘못되어 blackhole 콜백이 호출되면 CustomErrorException을 던집니다.CakePHP 2.1 : InternalErrorException에 대한 메시지 설정

throw new InternalErrorException('You have tried to submit a comment whose security token is either invalid or expired. Please try again by reloading the blog post and commenting again. Thank you.'); 

메시지가 프로덕션 모드 (디버그 == 0)로 표시되지 않는 것이 있습니다. "내부 오류가 발생했습니다"대신 사용자에게 메시지를 표시하려면 어떻게해야합니까?

내 error500.ctp입니다 : http://pastebin.com/t9NuzuqS

답변

1

Security 구성 요소의 blackHole 동작을 덮어 쓸 수 있습니다.

현재 cakephp\lib\Cake\Controller\Component\SecurityComponent에서 찾을 수 있습니다.

public function blackHole(Controller $controller, $error = '') { 
    if ($this->blackHoleCallback == null) { 
     throw new BadRequestException(__d('cake_dev', 'The request has been black-holed')); 
    } else { 
     return $this->_callback($controller, $this->blackHoleCallback, array($error)); 
    } 
} 

당신은 다른 메시지와 같은 예외를 던질 수 있습니다 : 당신은 당신이 원하는대로이 방법 당신의 Controller\Component 폴더에 SecurityComponent을 만들고 덮어 쓰기한다. debug이 0으로 설정된 경우에도이 예외가 표시됩니다. as detailed on the documentation

+0

해결책 주셔서 감사합니다. 왜 그것이 나를 위해 최적이 아닌지 이해하기 위해 아래의 코멘트를 읽으십시오. – wnstnsmth

+0

원래 Security 구성 요소를 변경하는 것이 아니라 app 폴더에 자신 만의 보안 구성 요소를 작성하고이 기능을 덮어 쓰면 표시 할 메시지가 변경됩니다. – Alvaro

+0

어쨌든 프로덕션 모드에서 예외를 표시 할 수 없다는 문제가 발견되면 게시 한 링크에서 공개 된 예외 중 하나에 대해 예외를 변경하십시오. (BadRequestException은 하나입니다.) – Alvaro

1

하는 "메시지"개발 목적으로 만 있습니다. 라이브 모드 (디버그 0)에서 방문자는 서버에있는 설명적인 문제 설명을 얻지 않아야합니다. 그는 어쨌든 그것을 이해하지 못했습니다. 라이브 모드에서 404/5xx가 던져진 것뿐입니다. 하지만 개발자가 나중에 찾을 수 있도록 메시지가 오류 로그됩니다.

+0

글쎄요, 전적으로 당신과 동의하지만, 사용자에게 의견을 제출하는 방법을 다시 알려주고 싶습니다. 사용자가 실수로 양식을 제출하여 보안 토큰이 유효하지 않은 경우가 발생했습니다. 이것은 내가별로 좋지 않은 설정 때문이지만, 현재로서는 논쟁의 여지가 없습니다. – wnstnsmth

+0

위에서 제시 한 것처럼 보안 구성 요소 자체를 변경하지 않고도 예외를 통해 사용자에게 메시지를 보내는 방법을 알고 있으면 좋을 것입니다. – wnstnsmth