2011-08-16 2 views
5

나는 특별한 변수 $message 여기 http://www.symfony-project.org/cookbook/1_2/en/error_templates를 설명하지만,이 변수가 적어도 예외에이 방법 throw new sfException('some message')symfony 1.4 : error.html.php에 예외 메시지를 전달하는 방법은 무엇입니까?

당신은 알고 계십니까이를 전달하는 다른 방법으로 전달 된 메시지를 포함하지 않는, 심포니 1.4에 정의되어 있지 않은 것 같다 사용하여 시도 error.html.php에 대한 메시지?

답변

7

사용자 정의 오류 처리를 수행해야합니다. 우리는 직접 symfony 사용자 지정 액션을 구현했습니다. 조심하십시오.이 액션 자체가 예외를 유발할 수도 있습니다.이를 고려해야합니다.

다음은 좋은 시작일 수 있습니다. 당신을 제외하고 수행 할 작업을 충분 수있는 이벤트 핸들러를 사용

$this->dispatcher->connect('application.throw_exception', array('MyClass', 'handleException')); 

, 예를 들어 방금 메일하려는 경우 : 먼저 이벤트에 대한 리스너를 추가, 좋은 장소는 ProjectConfiguration.class.php 것 관리자에게 스택 추적. 우리는 피드백 양식을 표시하고 처리하기위한 맞춤 작업을 진행하고자했습니다. 우리의 이벤트 핸들러는 다음과 같이보고 :

class MyClass { 
    public static function handleException(sfEvent $event) { 
    $moduleName = sfConfig::get('sf_error_500_module', 'error'); 
    $actionName = sfConfig::get('sf_error_500_action', 'error500'); 
    sfContext::getInstance()->getRequest()->addRequestParameters(array('exception' => $event->getSubject())); 
    $event->setReturnValue(true); 
    sfContext::getInstance()->getController()->forward($moduleName, $actionName); 
    } 
} 

당신은 지금 당신이 지금 할 수있는 작업 자체에서 settings.yml

all: 
    .actions: 
    error_500_module:  error 
    error_500_action:  error500 

에서 예외에에 전달하는 모듈 및 작업을 구성 할 수 있습니다 당신이 무엇을 예를 들면 예외가 필요하다. 피드백 양식을 표시하여 관리자에게 문의하십시오. $ request-> getParameter ('exception')을 사용하여 예외를 얻을 수 있습니다.

+1

+1 감사합니다. Google 시스템은 테마 지정 기능을 지원하며이 기능이 없으면 500 페이지 분량의 테마를 지원할 수 없었습니다. 매우 감사. – flu

+0

답변 해 주셔서 감사합니다! 커스텀 함수를'application.throw_exception'에 연결하면 * 해당 심포니의 기본 동작을 덮어 씁니까? 그렇다면 custom 함수 내에서'self :: parent()'를 호출하는 것을 막을 수 있습니까? 그냥 일부 기능을 추가하고 싶습니다. – Tapper

+1

@Tapper 반환 값을 수정하여 $ event-> setReturnValue (false)를 대신 수행 할 수 있습니다. – Gerry

0

sfContext을 사용하여 예외 메시지를 error.html.php으로 전달할 수 있지만 사용자 정의 함수를 사용해야합니다. 예외를 던집니다. 예를 들어 : throw new sfException('some message')를 사용하는 insted보다

class myToolkit { 
    public static function throwException($message) 
    { 
     sfContext::getInstance()->set('error_msg', $message); 
     throw new sfException($message); 
    } 

당신은 내가 훨씬 간단하게 답을 찾은 것 같아 error.html.php 사용 <?php echo sfContext::getInstance()->get('error_msg') ?>

1

에 메시지를 표시하려면 myToolkit::throwException('some message')

를 사용해야합니다. Symfony 1.4에서 $message은 실제로 정의되어 있지 않지만 $exception은 (예외 객체를 포함하고 있습니다).

그냥 에코 $exception->message입니다.

Et voilà!

관련 문제