使用中间件和增强\Webman\Config来区分不同业务模块端

jcy_tcp

场景需求描述

有些时候,我们需要区分当前请求的接口属于哪个业务端入口.比如:假设有admin、api(vip)两个业务端,然后我们有个统一的业务日志表,在记录业务日志时,我们需要记录当前的业务端,这个时候我们需要在service中通过一个方法获取当前业务端标识

传统web框架处理方式

yii2

 在yii2中,通过在模块的config配置id来标识不同业务端模块,然后通过`Yii::$app->id`来获取标识

laravel 、tp

 这两个框架应该也有和yii2类似的操作;当然还有一种方式:使用中间件来处理,在对应端增加一个中间件,然后在中间件里注入:`config(['auth.defaults.guard' => 'admin']);` 这样的操作,然后在业务中通过config获取标识

webman 处理方式

webman里,我们也可以采用上面的方式,增加全局的middleware配置

  ...
      'admin' => [
        \app\middleware\admin\AppIDMiddleware::class
    ],
    'api' => [
        \app\middleware\api\AppIDMiddleware::class
    ]
  • AppIDMiddleware

    class AppIDMiddleware implements MiddlewareInterface
    {
    
    public function process(Request $request, callable $handler): Response
    {
        Config::set('app.id', 'admin');
    
        return $handler($request);
    }
    }

    增强\Webman\Config,为其增加Set方法.通过继承的方式来实现

    class Config extends \Webman\Config
    {
    /**
     * @param string $key
     * @param $value
     * @return void
     */
    public static function set(string $key, $value)
    {
        $keyArray = explode('.', $key);
        $current = &static::$config;
        foreach ($keyArray as $index => $subKey) {
            // 如果是最后一个键,直接设置值并返回
            if ($index === count($keyArray) - 1) {
                $current[$subKey] = $value;
                return;
            }
    
            // 如果子键存在,则移动到下一级
            if (isset($current[$subKey])) {
                $current = &$current[$subKey];
            } else {
                // 如果子键不存在,则创建一个空数组或关联数组
                $current[$subKey] = [];
                $current = &$current[$subKey];
            }
        }
    //        $level = count($keyArray);
    //        if ($level == 1) {
    //            if (isset(static::$config[$key])) {
    //                static::$config[$key] = $value;
    //            }
    //            return;
    //        }
    //
    //        if ($level === 2) {
    //            if (isset(static::$config[$keyArray[0]][$keyArray[1]])) {
    //                static::$config[$keyArray[0]][$keyArray[1]] = $value;
    //            }
    //            return;
    //        }
    //
    //
    //        if ($level === 3) {
    //            if (isset(static::$config[$keyArray[0]][$keyArray[1]][$keyArray[12]])) {
    //                static::$config[$keyArray[0]][$keyArray[1]][$keyArray[2]] = $value;
    //            }
    //        }
    }
    }

    业务调用

    截图

235 0 0
0个评论

jcy_tcp

-44
积分
0
获赞数
0
粉丝数
2019-06-03 加入
🔝