框架安装完成后系统默认的全局配置文件是项目根目录下的 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怎么说呢...
2.jpg

  在项目的根目录下创建Config目录用于放配置文件.然后注意了如果你的版本是3.0的就别去看文档了.写的个球啊5.jpg转去2.0版本的文档看看去.注意下面是图,不是代码哈
image.png
从图可以看出来2.0的分离配置文件很简单嘛~照着官方文档复制粘贴就能搞定的嘛8.gif
先写好配置文件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

image.png

修改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);
    }
}

重启测试

image.png

修改成功。成功引入了Config目录下的所有配置文件.但是获取不到配置的数据

18.gif

遇到问题绝不能认为是自己错了!因为我只是复制粘贴代码的搬运工!3.gif

查看源码vendor\easyswoole\easyswoole\src\Config.php

/**
 * 设置配置项
 * 在server启动以后,无法动态的去添加,修改配置信息(进程数据独立)
 * @param string $keyPath 配置项名称 支持点语法
 * @param mixed  $data    配置项数据
 */
public function setConf($keyPath, $data): void
{
    $this->conf->set($keyPath, $data);
}

他的注释说的很明白!那我们就换一个方法吧.

31.jpg

可以看到源码中有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是啥.能获取到配置的方法就是好方法!
15.gif

Last modification:February 18th, 2020 at 10:32 pm