有些时候,我们需要区分当前请求的接口属于哪个业务端入口.比如:假设有admin、api(vip)两个业务端,然后我们有个统一的业务日志表,在记录业务日志时,我们需要记录当前的业务端,这个时候我们需要在service中通过一个方法获取当前业务端标识
在yii2中,通过在模块的config配置id来标识不同业务端模块,然后通过`Yii::$app->id`来获取标识
这两个框架应该也有和yii2类似的操作;当然还有一种方式:使用中间件来处理,在对应端增加一个中间件,然后在中间件里注入:`config(['auth.defaults.guard' => 'admin']);` 这样的操作,然后在业务中通过config获取标识
...
'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;
// }
// }
}
}