2013-01-13 19 views
7

私はこの問題を(アプリの外で生成するために)隔離しようとしましたが、できません。Laravel 4がキャッチできない例外

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

私もcatch (Exception $e)と試みたが、同じことが起こります。

このコードを使用すると、2行目に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(明らかに彼ら自身は確信していません)ので、それは決して安定しておらず、おそらく生産にとって最良の選択ではありません。

use Illuminate\Contracts\Encryption\DecryptException; 

catch文の前に:あなたは(一般的に、他のUSE文でファイルの先頭に)書くべきlaravel 5.1の場合

+0

+1です。ネームスペースでの作業は本当に私を台無しにしています。 「用途」などを宣言する方法はありますか? – Anthony

+0

ブラケット構文で 'namespace {/ * code here * /}'( 'namespace'キーワードの後ろに識別子なし)を定義することができます。グローバルクラスはグローバルクラスをバックスラッシュする必要はありません。 '\'が必要ですが、名前空間を持つクラスを定義することはできません( 'class a \ b {}'は無効です)。入れ子にすることはできません。ファンクションと定数では、少なくとも現在のNSに見つからなければグローバルNSからロードするフォールバックが組み込まれています。もちろん、あなたはいつでも 'Foo、Bar、Baf;を使うことができます(' Foo'などはグローバルなクラスのクラスです) – dualed

+0

よかったら教えてください。ヒントをありがとう! – Anthony

2

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

参考:https://laravel.com/docs/5.1/encryption - 値を復号化「の下で"

他の人にとって参考になるかもしれません。

関連する問題