gpt4 book ai didi

php - Laravel 返回 HttpException 对象而不是显示自定义错误页面

转载 作者:可可西里 更新时间:2023-10-31 22:52:08 24 4
gpt4 key购买 nike

我正在使用 spatie 权限模块来控制我站点内的角色和权限。我在 Authenticate 中间件中添加了一些内容。我的句柄现在看起来像这样:

public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest())
{
if ($request->ajax() || $request->wantsJson())
return response('Unauthorized.', 401);

return redirect()->guest('login');
}

if ( ! Auth::user()->can('access acp') )
{
if ($request->ajax() || $request->wantsJson())
return response('Unauthorised.', 403);

abort(403, "You do not have permission to access the Admin Control Panel. If you believe this is an error please contact the admin who set your account up for you.");
}

return $next($request);
}

因此,如果用户未登录,我们会将他们发送到登录页面,否则我们会检查用户是否有访问 acp 的权限,如果没有则向他们显示 403 错误。我在 views/errors 文件夹中添加了一个 403.blade.php。但是,当我运行该代码时,我得到了一个糟糕的消息!并且开发人员工具显示正在返回 500 ISE。我不明白为什么我没有看到我的自定义错误页面。

到目前为止,我已尝试将环境切换到生产环境并关闭 Debug模式,但这并没有显示页面。我也试过抛出授权异常,但这并没有什么不同。我也尝试使用 App::abort() 但我还是得到了 500 ISE。

我尝试用谷歌搜索这个问题,但找不到其他人遇到这个问题。如果能帮助我完成这项工作,我将不胜感激。

哇哦回来了

Error output

如果我这样修改代码

try
{
abort(403, "You do not have permission to access the Admin Control Panel. If you believe this is an error please contact the admin who set your account up for you.");
} catch ( HttpException $e )
{
dd($e);
}

然后我得到一个包含我的错误代码和消息的 HttpException 实例,那为什么不显示自定义错误页面呢?

最佳答案

我已经设法通过下面的代码解决了这个问题(请注意,它是一个 Lumen 应用程序,但它应该与 Laravel 一起工作)

routes.php

$app->get('/test', function () use ($app) {
abort(403, 'some string from abort');
});

resources/views/errors/403.blade.php

<html>
<body>
{{$msg}}
<br>
{{$code}}
</body>
</html>

app/Exceptions/Handler.php, modify render() function as below

public function render($request, Exception $e)
{
if ($e instanceof HttpException) {
$statusCode = $e->getStatusCode();

if (view()->exists('errors.'.$statusCode)) {
return response(view('errors.'.$statusCode, [
'msg' => $e->getMessage(),
'code' => $statusCode
]), $statusCode);
}
}

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

它根据文档做了 Laravel 应该做的事情

关于php - Laravel 返回 HttpException 对象而不是显示自定义错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37946166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com