データベース接続の問題からスローされた例外がグローバルに処理されるようにしようとしています。ルーメン:例外ハンドラ - QueryExceptionまたはPDOExceptionをキャッチしない
私はrender()メソッドは、しかし、例外のいずれも巻き込まないされている中Handler.php \私のアプリの\例外で次のように追加しました:これはまた私のapp.phpに追加された
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Database\QueryException;
use Illuminate\Validation\ValidationException;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Laravel\Lumen\Exceptions\Handler as ExceptionHandler;
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use PDOException;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that should not be reported.
*
* @var array
*/
protected $dontReport = [
AuthorizationException::class,
HttpException::class,
ModelNotFoundException::class,
ValidationException::class,
];
/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $e
* @return void
*/
public function report(Exception $e)
{
parent::report($e);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $e
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $e)
{
if ($e instanceof AuthorizationException) {
return response()->json((['status' => 403, 'message' => 'Insufficient privileges to perform this action']), 403);
}
if ($e instanceof MethodNotAllowedHttpException) {
return response()->json((['status' => 405, 'message' => 'Method Not Allowed']), 405);
}
if ($e instanceof NotFoundHttpException) {
return response()->json((['status' => 404, 'message' => 'The requested resource was not found']), 404);
}
if ($e instanceof QueryException) {
return response()->json((['id' => 0, 'status_billing' => 'The requested resource was not found']), 500);
}
if ($e instanceof PDOException) {
return response()->json((['id' => 0, 'status_billing' => 'The requested resource was not found']), 500);
}
return parent::render($request, $e);
}
}
:
$app->singleton(App\Exceptions\Handler::class);
私の人生のために、私はこれをうまく動作させることができません。
すべてのヘルプ/アドバイスが大幅に
おかげ
お返事ありがとうございます。 これを見る前に私はこれをやっていましたが、それはうまくいったのですが、なぜ私が最初からそれを持っていたのかはわかりません。 ほんの数分前に私はそれを元に戻すことにしました。 もう1つのことは、私は例外が既にメソッドにキャッチされている場合、あなたが確認することを望む、レンダリングは、それをキャッチしないだろうか? また、「Illuminate \ Contracts \ Debug \ ExceptionHandler :: class」が必要な理由を簡単にまとめてもらえますか? ありがとうございます。 – thorbon
はい、例外がすでにこのメソッドで捕捉されている場合、レンダリングメソッドはそれを捕まえません。私は詳細な説明を含めるために私の答えを更新しました。 – ayip
素晴らしいです、ありがとうございます。 他にも使用できるバインドはありますか? Illuminate \ Contracts \ Debug \ ExceptionHandler – thorbon