Некоторое время я пытался обработать исключение, созданное laravel. Я много чего пробовал, но похоже, что это не работает. Вот мой синтаксис, который я использовал:
public function render($request, Exception $e)
{
//404 page when a model is not found
if ($e instanceof ModelNotFoundException) {
return response()->view('errors.404', [], 404);
}elseif ($e instanceof \AuthorizationException) {
return response()->view('errors.403', [], 403);
}elseif ($e instanceof TokenMismatchException) {
Flash::error('Sorry, your session seems to have expired. Please try again.');
return redirect('/');
}elseif ($e instanceof \ErrorException) {
return response()->view('errors.500', [], 500);
}else {
return response()->view('errors.500', [], 500);
}
// return parent::render($request, $e);
}
Я включил следующее:
use Exception;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Session\TokenMismatchException;
use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpKernel\Exception\HttpException;
Далее, ранее было добавлено следующее:
protected $dontReport = [
AuthorizationException::class,
HttpException::class,
ModelNotFoundException::class,
ValidationException::class,
TokenMismatchException::class,
];
Кто-нибудь может мне с этим помочь? Я застрял в этом несколько дней. Любая помощь будет оценена по достоинству.
Причина в том, что эти исключения исключены структурой и поэтому не сообщаются. Для справки см. здесь.
Поскольку свойство, определяющее исключенные исключения, - это protected
, вы должны иметь возможность переопределить его в своем файле app/Exceptions/Handler.php
. Вы не должны удалять все эти исключения, а только те, которые вы действительно хотите поймать. Так что просто добавьте следующие строки в ваш Handler.php
:
/**
* A list of the internal exception types that should not be reported.
*
* @var array
*/
protected $internalDontReport = [
AuthenticationException::class,
HttpException::class,
HttpResponseException::class,
ModelNotFoundException::class,
ValidationException::class,
];
Вам также нужно будет добавить операторы use
для всех классов.
(Имейте в виду, что это список исключенных исключений для Laravel 5.6 - если вы используете другую версию, вам, возможно, придется использовать git blame или другую ветку, чтобы найти правильный список для вашей версии.)