2014-09-14 2 views
0

내가 내 응용 프로그램의 예외를 처리하는 하나의 폐쇄를 사용하여 예외 :Laravel 예외 처리는 "잘못"클래스

App::error(function(Exception $exception, $code) 
{ 
    if (is_a($exception, 'MsgException')) { 
     ... 
     return; 
    } 
    dd($exception); // debugging 
}); 

이상한 것은입니다 나는 MsgException ...

<?php use MsgException; // alias for ExampleNamespace\MsgException 

... 
throw new MsgException(); 
를 던져 사용자 정의 클래스는

...

<?php namespace ExampleNamespace; 

use RuntimeException; 

class MsgException extends RuntimeException {} 

... is_a($exception)는입니다및 dd($exception)ErrorException이라고 말합니다.

왜 이런 일이 발생하는지 알 수 없습니다. 내 응용 프로그램을 디버깅 할 수있는 제안이나 아이디어?

+0

왜 유 그냥 예외를 catch하지 않고 정말 당신이 무엇을 의미합니까 –

+0

을의 출처 참조하십시오를 분명히 \보기 \ 엔진에서 \ CompilerEngine handleViewException 방법은 원래의 예외를 대체? – chris342423

답변

0

짧은 대답은 꽤 간단합니다. 예외가보기 내부에 던져지기 때문에 효과가 없습니다. 당신은 간단한 컨트롤러 방법 또는 라우팅 폐쇄 또는 뷰 외부의 어떤 장소에

throw new \RuntimeException('Test'); 

을 추가하고 뷰 템플릿에

<?php throw new \RuntimeException('Test'); ?> 

를 추가하여 테스트 할 수 있습니다. Laravel은 첫 번째 문자를 RuntimeException, 두 번째 문자를 ErrorException으로 표시합니다.

불행히도이 문제를 실제로 해결하는 데 도움이되지 않습니다.

PS :

protected function handleViewException($e, $obLevel) 
{ 
    $e = new \ErrorException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e); 

    parent::handleViewException($e, $obLevel); 
} 
1

일반 예외 처리기를 사용하여 다른 유형의 예외를 처리하지 마십시오. 나만의 등록.

App::error(function(ExampleNamespace\MsgException $exception, $code) 
{ 
    dd($exception); // debugging 
}); 

보다 약 App::errorhere 수 있습니다 읽어 보시기 바랍니다.

+0

탱크하지만, 문제를 해결하지 못했습니다 (그러나 나는이 방법을 시도했지만 작동하지 않습니다 - 당연히 아닙니다) – chris342423