关于webman的env文件不支持分组吗?

楚羽幽

问题描述

TP和laravel的env文件支持以下这种分组方式

APP_DEBUG = true

KF_SERVER_PORT = 39800

DEFAULT_TIMEZONE = Asia/Shanghai

UPLOAD_PUBLIC_URL = http://kfadmin.nat.renloong.com

[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = 1
USERNAME = 1
PASSWORD = 1
HOSTPORT = 3306
CHARSET = utf8mb4
CHARSET_CI = utf8mb4_general_ci
PREFIX = yc_

[DATABASE1]
TEST_NAME = 'AAAAAA'

但在webman里面使用这种[分组名称]的方式,就会直接报错,无法启动webman

647 1 8
1个回答

北月

你要支持这种类似于 php.ini 的配置很简单,只需要使用 PHP 内置函数 parse_ini_file 进行解析配置文件即可,这样子的好处是可以不用安装 vlucas/phpdotenv

// app/functions.php
function flattenConfigArray($config, $prefix = ''): void
{
    foreach ($config as $key => $value) {
        // 把 key 转为小写,也可以不转
        $key = strtolower($key);
        if (is_array($value)) {
            flattenConfigArray($value, $prefix . $key . '.');
        } else {
            putenv($prefix . $key . '=' . $value);
        }
    }
}

(static function (): void {
    $iniFile = base_path(false) . '/.env';
    if (file_exists($iniFile)) {
        $config = parse_ini_file($iniFile, true);
        if (count($config)) {
            flattenConfigArray($config);
        }
    }
})();
// app/controller/IndexController.php
public function index(Request $request)
{
    $database = getenv('database.type');
    $app_debug = getenv('app_debug');
    return json(['database'=>$database, 'app_debug'=>$app_debug]);
}

截图

  • 楚羽幽 2023-07-10

    屌屌屌,感谢

  • 原地起飞 2024-01-24

    这个确实好 但是在配置文件中不生效

  • 原地起飞 2024-01-24

    逻辑层没问题 就是在配置文件中不知道解析成啥了 能帮忙看下么

  • 北月 2024-01-24

    这是一个加载顺序的问题,方法有很多

    1. 把上面的代码写到 support/helpers.php 或者 start.php 里面
    2. 新建一个 functions.php ,然后用 composer 的自动加载来解决
    3. 重新 support/App.phploadAllConfig 方法,将代码执行一下
      ......
  • 原地起飞 2024-01-25

    感谢大佬@北月 确实解决了

🔝