每当我收到TokenMismatchException
错误时,Chrome工具都会显示HTTP响应代码为500。
但是,我没有看到我的errors/500.blade.php
自定义错误页面。
如何让它按预期工作?
答案 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()
(处理ModelNotFoundException
和AuthorizationException
的方式)。为此,只需将以下内容添加到App\Exceptions\Handler
:
protected function prepareException(Exception $e)
{
$e = parent::prepareException($e);
if ($e instanceof TokenMismatchException) {
$e = new HttpException(500, $e->getMessage());
}
return $e;
}
不要忘记导入TokenMismatchException
和HttpException
(Symfony\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
。