# 背景
前段时间walkor出了应用插件这一重大升级特性后,看到后非常棒!很多独立应用或项目就可以很愉快的直接集成进来。
当然如果之前代码不是webman代码,可能需要一些小小的调整及改动,就算使用composer去安装第三方相应包后,我们发现除了需要调整类似db、redis等配置信息外,获取配置需要在前面要加上(Eg. plugin.xx.app.debug)类似这样来获取,程序中如果只是少量使用config()还好一些,如果有很多,可能就需要批量替换。是否有其它办法呢?
#办法猜想
能不能不去批量替换config()里面的配置信息?
Eg: config("app.debug") ==> config("plugin.statistic.app.debug")
根据这个假想,我尝试了以下几个办法
##再造config()方法
在应用插件里面的function.php
### function.php
```
<?php
namespace plugin\statistic {
function config($key, $default) {
return \config("plugin.statistic.$key", $default);
}
}
```
###使用
\plugin\statistic\config("app.debug");
等同
\config("plugin.statistic.app.debug")
##修改config()方法
```
/**
* @param string|null $key
* @param $default
* @return array|mixed|null
*/
function config(string $key = null, $default = null)
{
if (\substr($key, 0, 6) !== "plugin") {
$plugin_app = Config::get("plugin.app");
$key = $plugin_app ? "plugin.$plugin_app.$key" : $key;
}
return Config::get($key, $default);
}
```
###利用各自应用插件中的中间件
```
<?php
namespace plugin\statistic\app\middleware;
use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;
use Webman\Config;
class Test implements MiddlewareInterface
{
public function process(Request $request, callable $handler) : Response
{
echo '这里是请求穿越阶段,也就是请求处理前';
//设置插件app
Config::set("plugin.app", "statistic");
echo '这里是请求穿越阶段,也就是请求处理前2';
$response = $handler($request); // 继续向洋葱芯穿越,直至执行控制器得到响应
echo '这里是响应穿出阶段,也就是请求处理后';
return $response;
}
}
```
> 从上面可以看到有使用到Config::set(),此方法可以参考之前分享的一篇[ 简易版Config-set使用及说明](https://www.workerman.net/a/1414)
###使用
继续使用config()即可
#最后
以上仅是个人拙见,欢迎一起来讨论!