【问题标题】:Laravel custom error page not displaying for TokenMismatchExceptionLaravel 自定义错误页面未显示 TokenMismatchException
【发布时间】:2017-08-10 13:00:49
【问题描述】:

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

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

我怎样才能让它按预期工作?

【问题讨论】:

  • 您是否尝试在 ENV 文件中更改 debug => false?
  • 嗨@QuỳnhNguyễn 如果我设置APP_DEBUG=false 我没有得到完整的异常堆栈,而只是“哎呀,好像出了点问题”。消息而不是我的自定义 500 错误页面。
  • 是的,我已经尝试过了,它可以工作,但我希望能够简单地创建自定义错误页面,因为它返回 500 错误代码。

标签: laravel laravel-5 laravel-5.3


【解决方案1】:

您可以在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);
}

您的errors/ 目录中应该有 500.blade.php 和 404.blade.php

【讨论】:

  • 知道为什么在这种情况下使用 500.blade.php 自定义错误页面不能开箱即用吗?
  • 我已经更新了我的答案,请查看并在下方评论。
【解决方案2】:

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;
}

别忘了导入TokenMismatchExceptionHttpException (Symfony\Component\HttpKernel\Exception\HttpException)。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多