PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > Laravel教程 > 正文

    Laravel 异常上下文解决方案

    作者:admin来源:overtrue浏览:时间:2021-11-15 13:40:07我要评论
    导读:最近项目遇到一个情况,我们在遇到用户访问某个信息没有权限的时候,希望提示详细的原因
    最近项目遇到一个情况,我们在遇到用户访问某个信息没有权限的时候,希望提示详细的原因,比如当访问一个团队资源时非成员访问的场景下会提示一个:您不是 [xxxxxx] 团队的成员,暂时无法查看,可<申请加入>,同时需要显示打码后的团队名称,以及加入按钮,可是接口方的逻辑是当没有权限时直接 abort 了:

    我们可以将这个逻辑抽离为一个独立的异常类,实现 render 方法即可:

    我们先创建一个异常类:

    $ ./artisan make:exception NotTeamMemberException

    实现代码如下:

    <?php

    namespace App\Exceptions;

    use App\Team;

    class NotTeamMemberException extends \Exception
    {
        public Team $team;

        public function __construct(Team $team, $message = "")
        {
            $this->team = $team;
            parent::__construct($message, 403);
        }

        public function render()
        {
            return response()->json(
                [
                    'message' => !empty($this->message) ? $this->message : '您无权访问该资源',
                    'team' => [
                        'id' => $this->team->id,
                        'name' => $this->team->desensitised_name,
                    ],
                ],
                403
            );
        }
    }


    这样一来,我们的逻辑就变成了:

    if (!$user->isMember($resouce->team)) {
         throw new NotTeamMemberException($resouce->team, '您无权访问该资源');
    }
    当然也可以简写为:

    \throw_if(!$user->isMember($resouce->team), NotTeamMemberException::class, $resouce->team, '您无权访问该资源');
    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-153-6651-1.html
    相关热词搜索: laravel异常处理