如何在Laravel的Handler渲染中捕获授权错误

时间:2017-05-19 03:52:05

标签: php laravel laravel-5 authorization

我正在尝试显示自定义错误页面,如果错误不是“未找到页面”或身份验证问题(例如,尝试访问用户未访问的页面),我希望显示该错误页面可使用)。我在Laravel 5.3的Handler.php中使用下面的代码。虽然404部分工作,但认证部分不起作用(触发此错误只返回500页)。我错过了什么?

public function render($request, Exception $e)
{
    if ($e instanceof NotFoundHttpException || $e instanceof AuthorizationException || $e instanceof AuthenticationException) {
        return parent::render($request, $e);
    }
    else {
        return response()->view('errors.500', [
            'sentryID' => $this->sentryID,
        ], 500);
    }
}

1 个答案:

答案 0 :(得分:2)

修改:看起来您想要处理所有全局错误页面。 Laravel使用symfony的异常处理程序来生成错误页面文本和样式。这可以在

找到
)

它在vendor/symfony/debug/ExceptionHandler.php 中用作

vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php

要处理每个错误和异常,您可以将方法use Symfony\Component\Debug\ExceptionHandler as SymfonyExceptionHandler; 扩展到prepareResponse并进行适当的更改。

app/Exceptions/Handler.php

您可以在protected function prepareResponse($request, Exception $e) { if ($this->isHttpException($e)) { return $this->toIlluminateResponse($this->renderHttpException($e), $e); } else { return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e); } }

中查看此方法的基础工作情况

结束修改

您不需要为此渲染方法。开箱即用的laravel搜索错误视图,并根据错误代码呈现它们(如果可用)。因此,对于404和500,您可以创建以下两个视图并在那里进行自定义。

vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php

此视图会获取您需要时显示的异常,状态和标题信息。它们被称为

resources/views/errors/404.blade.php
resources/views/errors/500.blade.php

用于身份验证检查。当用户未经身份验证时,Laravel会调用return response()->view("errors.{$status}", ['exception' => $e], $status, $e->getHeaders()); 中的unauthenticated方法。默认情况下,此代码会将用户重定向到登录页面或显示json响应。你可以在这里进行更改。

app/Exceptions/Handler.php