Laravel异常上下文解决方案分享

2022-04-16 14:17:37
目录
前言源"}

我们不可能将 message 用 html 来完成前端提示页的展示,这样耦合性太强,违背了前后端分离的原则。我们的目标是返回如下的格式即可解决:

HTTP/1.0 403 Forbidden{"message": "您无权访问该资源","team": {"id": "abxT8sioa0Ms","name": "CoDesign****"}}

通过携带上下文的方法传递数据,方便了前端同学自由组合。

开始改造

当然这并不是什么复杂的事情,直接修改原来的 abort_if 即可解决:

- abort_if(!$user->isMember($resouce->team), 403, '您无权访问该资源');+ if (!$user->isMember($resouce->team)) {+return response()->json([+'message' => '您无权访问该资源',+'team' => [+'id' => $resouce->team_id,+'name'=> $resouce->team->desensitised_name,+]+], 403);+ }

这样看起来解决了问题,可是试想一下,如果是在闭包里面检测到异常想要退出,上面这种 return 式的写法就会比较难搞了,毕竟 return 只会终止最近的上下文环境,我们还是希望像 abort 一样能终止整个应用的执行,再进行另一番改造。

优化实现

看了 abort 源码,我发现它的第一个参数其实支持 SymfonyComponentHttpFoundationResponse 实例,而上面

相关文章 大家在看