框架安装完成后系统默认的全局配置文件是项目根目录下的 produce.php
,dev.php
文件,(在3.1.2版本之前是dev.env
,produce.env
). 当使用php easyswoole start
命令启动时,默认为开发模式,加载 dev.php
运行 php easyswoole start produce
命令时,为生产模式,加载 produce.php
.我们可以直接将配置的文件写入到dev.env
,produce.env
目录下.
但是我也不知道为什么我就想把它抽离出来.就当是为了方便管理吧,忘了声明.如果用Yaconf
做配置文件的话就可以看着玩玩.因为分离配置的这个文档tmd怎么说呢...
在项目的根目录下创建Config
目录用于放配置文件.然后注意了如果你的版本是3.0
的就别去看文档了.写的个球啊转去2.0
版本的文档看看去.注意下面是图,不是代码哈
从图可以看出来2.0
的分离配置文件很简单嘛~照着官方文档复制粘贴就能搞定的嘛
先写好配置文件Config/RedisConfig.php
<?php
return [
'REDISCONF' => [
'host' => '127.0.0.1',
'port' => 6379,
'time_out' => 3
]
];
在EasySwooleEvent.php
中的initialize
方法添加
// 载入项目 Conf 文件夹中所有的配置文件 . 我们根目录下刚创建的Config目录
self::loadConf(EASYSWOOLE_ROOT . '/Config');
然后创建loadConf
方法
public static function loadConf($ConfPath)
{
$Conf = Config::getInstance();
//注意这个file需要引入的 这里的scandirectory与2.x的sacnDir一样注意修改
$files = File::scanDirectory($ConfPath);
var_dump($files);
//获取所有Config下所有的文件*/
foreach ($files as $file) {
$data = require_once $file;
$Conf->setConf(strtolower(basename($file,'.php')),(array)$data);
}
}
然后运行发现报错.可以看到参数不对。多了一个纬度的数组 我们只要files
修改loadConf
方法
public static function loadConf($ConfPath)
{
$Conf = Config::getInstance();
//注意这个file需要引入的 这里的scandirectory与2.x的sacnDir一样注意修改
$files = File::scanDirectory($ConfPath);
//可以看到参数不对。多了一个纬度的数组 我们只要files
var_dump($files['files']);
//获取所有Config下所有的文件*/
foreach ($files['files'] as $file) {
$data = require_once $file;
$Conf->setConf(strtolower(basename($file,'.php')),(array)$data);
}
}
重启测试
修改成功。成功引入了Config
目录下的所有配置文件.但是获取不到配置的数据
遇到问题绝不能认为是自己错了!因为我只是复制粘贴代码的搬运工!
查看源码vendor\easyswoole\easyswoole\src\Config.php
/**
* 设置配置项
* 在server启动以后,无法动态的去添加,修改配置信息(进程数据独立)
* @param string $keyPath 配置项名称 支持点语法
* @param mixed $data 配置项数据
*/
public function setConf($keyPath, $data): void
{
$this->conf->set($keyPath, $data);
}
他的注释说的很明白!那我们就换一个方法吧.
可以看到源码中有loadFile
这个方法
/**
* 载入一个文件的配置项
* @param string $filePath 配置文件路径
* @param bool $merge 是否将内容合并入主配置
* @author : evalor <master@evalor.cn>
*/
public function loadFile($filePath, $merge = false)
{
if (is_file($filePath)) {
$confData = require_once $filePath;
if (is_array($confData) && !empty($confData)) {
$basename = strtolower(basename($filePath, '.php'));
if (!$merge) {
$this->conf[$basename] = $confData;
} else {
$this->conf = new SplArray(array_merge($this->toArray(), $confData));
}
}
}
}
就先拿他测试一下吧.更改我们EasySwooleEvent.php
下的loadConf
方法
public static function loadConf($ConfPath)
{
$Conf = Config::getInstance();
//注意这个file需要引入的 这里的scandirectory与2.x的sacnDir一样注意修改
$files = File::scanDirectory($ConfPath);
//可以看到参数不对。多了一个纬度的数组 我们只要files
//获取所有Config下所有的文件*/
foreach ($files['files'] as $file) {
//true合并到祝配置中,flase name=>data
$Conf->loadFile($file, 'true');
}
}
获取配置文件
$db = Config::getInstance()->getConfig('REDISCONF');
return $this->writeJson(0,'ok',$db);
获取成功!管tmd是啥.能获取到配置的方法就是好方法!