laravel-module如何在不同的模块捕获系统异常

版本:Laravel 8

我现在的实现方式是在每个模块的服务提供者中设置一个全局变量

$GLOBALS['module_name'] = $this->moduleName;

然后在App\Exceptions\Handler中判断

public function register()
{
    if (isset($GLOBALS['module_name'])) {
        switch ($GLOBALS['module_name']) {
            case 'Admin':
                $this->admin();
                break;
            case 'Shop':
                $this->shop();
                break;
        }
    }
}

请问各位大佬,你有没有合理的方案?

以下是反面案例

  1. app()->bind(),用此方法设置全局变量,在App\Exceptions\Handler获取,结果cli模式下报错了
  2. cache()->store(‘array’)->put(),此方法也是cli模式报错了!
让PHP再次伟大
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 10
JaguarJack

在每个模块定义的 BaseException,然后把模块的名称的写进去

class BaseException
{
    protected $modulename = 'shop'

   public function getModuleName()
  {
        return $this->modulename;
  }
}

模块内的 Exception 继承 Base。这样在 Handle 里面从 Exception 获取 moduleName 就可以了。

1年前 评论
勇敢的心 (楼主) 1年前
JaguarJack (作者) 1年前
勇敢的心 (楼主) 1年前
JaguarJack (作者) 1年前
勇敢的心 (楼主) 1年前
mouyong

大佬,换 fresns/plugin-manager 吧?地址:gitee.com/fresns/plugin-manager

安装 2.x 版本。

你使用的时候,可以考虑:

插件运行阶段通过中间件去接管掉默认的 exception 处理。

1年前 评论
勇敢的心 (楼主) 1年前
mouyong (作者) 1年前
勇敢的心 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!