2016-12-11 36 views
1

Laravelでは、エラーが発生した場合、軽微な注意、警告、および推奨されないエラーが発生するたびに、アプリケーションを強制終了する完全なデバッグ情報が得られます。私のApp.configで私はデバッグ=>偽にして、何かが間違っているような "おっとり、"のメッセージが表示されます。Laravel例外ハンドラを無効にする

すべてのエラー処理をオフにできますが、アプリケーションのフロー全体を中断しない通常のPHPエラーを取得するにはどうすればよいですか?

答えて

2

App\Exceptions\Handler.phpファイルはこのために作成されています。あなたがそう選択した場合

public function render()方法では、特定のリダイレクト/ページビューをアプリケーションをキャッチし、実行することができます。

たとえば、アプリケーションでHttpException年代をキャプチャして、あなたが望んだ場合はエラーページを返すことができます:

public function render($request, Exception $e) 
{ 
    //other stuff 

    if ($e instanceof HttpException) { 
     return view('errors.general')->withErrors([ 
      'message' => 'The application encountered an error!' 
     ]); 
    } 

    return parent::render($request, $exception); 
} 
+1

質問を読み、あなたのニックネームを読んだ後に私が思っていたものだったので、あなたはニックネームをしました:)とにかく、正しい答えが私から+1です。 –

1

特定のPHPエラータイプのワークフローを中断したくない場合は、これらのエラーに対してLaravelによって登録されたエラーハンドラを無効にする必要があります。

Laravelはエラー処理をIlluminate/Foundation/Bootstrap/HandleExceptions.phpに登録します。このブートストラップは、あなたのHttpカーネルが要求を処理するときに呼び出されるいくつかのブートストラップの1つです。

実行する方法はいくつかありますが、最も簡単なのは、このブートストラッパーが呼び出された後に発生するイベントを処理することです。イベントハンドラでは、Laravelで処理したくないエラーのエラーハンドラをリセットできます。あなたのbootstrap/app.phpファイルで

、右$app前に次の行を追加しますが返されます。

$app->afterBootstrapping(
    'Illuminate\Foundation\Bootstrap\HandleExceptions', 
    function ($app) { 
     set_error_handler(function ($level, $message, $file = '', $line = 0, $context = []) { 
      // Check if this error level is handled by error reporting 
      if (error_reporting() & $level) { 
       // Return false for any error levels that should 
       // be handled by the built in PHP error handler. 
       if ($level & (E_WARNING | E_NOTICE | E_DEPRECATED)) { 
        return false; 
       } 

       // Throw an exception to be handled by Laravel for all other errors. 
       throw new ErrorException($message, 0, $level, $file, $line); 
      } 
     }); 
    } 
); 
1

アップ投票答えは、彼は尋ねたものの反対であること。 私が知る限りでは、エラー報告と画面のレンダリングを引き継ぐことを分離する方法はありません。私はLaravel 5のコードを見てきましたが、まだセットアップを使用してそれらを分割する方法を見つけていません。

すべてのエラー処理を完全に引き継ぎ、すべてのlaravels内部トラッキングを削除するライブラリを作成できますが、オリジナルページエラーが必要な場合はlaravelに戻す必要があります取り扱い。最も簡単な方法は、3番目の部分のエラーハンドラベンダを見つけて、それを修正してすべてのエラーハンドラを引き継ぎ、レンダリングをブロックしないことです。