Обработчик не перехватывает исключение из списка авторизации и несоответствие токена. Laravel - PullRequest
0 голосов
/ 02 мая 2018

Я уже некоторое время пытаюсь обработать исключение, выброшенное 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,
];

Может ли кто-нибудь помочь мне с этим? Я застрял в этом в течение нескольких дней. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 05 мая 2018

Причина заключается в том, что эти исключения исключены платформой и поэтому не сообщаются. См. здесь для справки.

Поскольку свойство, определяющее исключенные исключения, - 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 или другую ветку, чтобы найти правильный список для вашей версии.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...