对于TokenMismatchException,不显示Laravel自定义错误页面

时间:2017-03-19 06:04:17

标签: laravel laravel-5 laravel-5.3

每当我收到TokenMismatchException错误时,Chrome工具都会显示HTTP响应代码为500。

但是,我没有看到我的errors/500.blade.php自定义错误页面。

如何让它按预期工作?

2 个答案:

答案 0 :(得分:1)

Laravel只会将[error_code].blade.php文件用于HttpException的实例。由于TokenMismatchException不是HttpException Laravel的实例,因此无法呈现您的500.blade.php(开箱即用)。

正如@Comrade所指出,您可以在App\Exceptions\Handler课程中更改此行为。

要执行此操作,您可以在render()方法中明确检查例外:

public function render($request, Exception $exception)
{
    if ($exception instanceof TokenMismatchException) {
        return response()->view('errors.500', compact('exception'), 500);
    }

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

或者,您可以覆盖prepareException()(处理ModelNotFoundExceptionAuthorizationException的方式)。为此,只需将以下内容添加到App\Exceptions\Handler

protected function prepareException(Exception $e)
{
    $e = parent::prepareException($e);

    if ($e instanceof TokenMismatchException) {
        $e = new HttpException(500, $e->getMessage());
    }

    return $e;
}

不要忘记导入TokenMismatchExceptionHttpExceptionSymfony\Component\HttpKernel\Exception\HttpException)。

希望这有帮助!

答案 1 :(得分:0)

您可以在void*

中处理例外情况
App\Exceptions\Handler.php

您的public function render($request, Exception $exception) { // 404 page when a model is not found if ($exception instanceof ModelNotFoundException) { return response()->view('errors.404', [], 404); } // Custom error 500 view on production if (app()->environment() == 'production') { return response()->view('errors.500', [], 500); } return parent::render($request, $exception); } 目录中应该有500.blade.php和404.blade.php