我正在尝试显示自定义错误页面,如果错误不是“未找到页面”或身份验证问题(例如,尝试访问用户未访问的页面),我希望显示该错误页面可使用)。我在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);
}
}
答案 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