2013-01-13 5 views
7

이 문제를 (앱 외부에서 생성하기 위해) 분리하려했지만 시도 할 수 없었습니다.Laravel 4가 예외를 잡을 수 없음

try { 
    $has_cache = Cache::has($cache_key); 
} 
catch (DecryptException $e) { 
    echo "No biggie"; 
    exit; 
} 

나는 또한 catch (Exception $e)으로 시도했지만, 같은 일이 발생합니다.

이 코드를 사용하면 두 번째 줄에 DecryptException이 발생합니다. 어떻게 이런 일이 일어날 수 있습니까? try 블록에 있습니까?

내가 말했듯이, 나는 깨끗한 프로젝트에서 똑같이하려고 노력했으나 거기에서 예외를 잡았으므로 어디서 무엇을 엉망으로 만들 수 있는지 물었다. 응용 프로그램이 을 네임 스페이스되면

+0

하나 이상의 DecryptException 클래스가있을 수 있습니다, 그것은 내가 생각할 수있는 유일한 것입니다. – dualed

+0

나는 "catch (Exception $ e)"를 사용하려고 시도 했으므로 내 질문을 업데이트했으며 이것도 작동하지 않았습니다. –

+0

실제 오류 메시지를 추가 할 수 있습니까? 귀하의 대답은 – dualed

답변

24

, 당신은 마찬가지로

catch(\Exception $e); 
// or preferably 
catch(\RuntimeException $e); 

를 사용해야합니다, 당신이 Illuminate\Encryption에서 네임 스페이스되는 잡으려고 노력하는 DecryptException 그래서 당신이 필요로하는 거라고 생각

catch(\Illuminate\Encryption\DecryptException) 
// or use "use" somewhere before the try/catch 
use \Illuminate\Encryption\DecryptException 

Laravel 4가 여전히 인 것을 염두에 두십시오. 알파 또는 pre-beta (분명히 그들은 그들 자신이 확실하지 않다), 그래서 그것은 결코 안정적이지 않으며 아마 생산을위한 최선의 선택이 아니다.

+0

+1입니다. 네임 스페이스에서 일하는 것은 정말 나를 망치고 있습니다. "use /"또는 무엇인가를 선언 할 방법이 있습니까? 모든 글로벌 클래스를 역 슬래시 (backslash)해야하는 것은 짜증이납니다. – Anthony

+0

브래킷 구문을 사용하면'namespace {/ * code here * /}'를 정의 할 수 있습니다 ('namespace' 키워드 뒤에 식별자가없는 경우). '\'이 필요하지만 네임 스페이스가있는 클래스를 정의 할 수는 없습니다 ('class a \ b {}'는 유효하지 않습니다). 그리고 네스트를 중첩 할 수 없으므로 아마도별로 좋지 않을 것입니다. 함수와 상수의 경우 적어도 현재 NS에 없으면 글로벌 NS에서로드하는 폴백이 내장되어 있습니다. 물론 Foo, Bar, Baf;을 사용할 수 있습니다 ('Foo' 등은 세계 공간의 클래스입니다). – dualed

+0

알았어. 팁 주셔서 감사! – Anthony

2

laravel 5.1 당신은 작성해야합니다 (일반적으로 다른 사용 문을 사용하여 파일의 시작에서) :

use Illuminate\Contracts\Encryption\DecryptException; 

catch 문 전 :

try { 
    $data = \Crypt::decrypt($key); 
} catch (DecryptException $e) { 
    echo 'caught exception'; 
    exit(); 
} 

참조 : https://laravel.com/docs/5.1/encryption - 값을 암호 해독 "에서 "

다른 사람들에게 도움이 될 수 있습니다.

관련 문제