前段时间walkor出了应用插件这一重大升级特性后,看到后非常棒!很多独立应用或项目就可以很愉快的直接集成进来。
当然如果之前代码不是webman代码,可能需要一些小小的调整及改动,就算使用composer去安装第三方相应包后,我们发现除了需要调整类似db、redis等配置信息外,获取配置需要在前面要加上(Eg. plugin.xx.app.debug)类似这样来获取,程序中如果只是少量使用config()还好一些,如果有很多,可能就需要批量替换。是否有其它办法呢?
能不能不去批量替换config()里面的配置信息?
Eg: config("app.debug") ==> config("plugin.statistic.app.debug")
根据这个假想,我尝试了以下几个办法
在应用插件里面的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")
/**
* @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使用及说明
继续使用config()即可
以上仅是个人拙见,欢迎一起来讨论!
感觉还是ide 正则批量替换简单,反正db那些都要替换,顺便就都替换了
你说的也有道理,因人而异