webman官方可否指定一个env切换环境的组件呢?

dafa168

https://wenda.workerman.net/question/7503
https://wenda.workerman.net/question/7534

现在开发项目确实需要一个切换环境的组件,希望大佬能安排下。谢谢。

阅读 152
3个回答

walkor

这个就几行代码,感觉用不着什么组件

1、config/下建立个 .env 文件,内容类似

return [
    'DB_HOST' => '这写数据库地址',
    'DB_PASSWORD' => '这里写密码'
];

2、support/helper.php 里添加一个函数比如

function env($key, $default = null) {
    static $env_config = [];
    if (!$env_config) {
        $env_config = include config_path().'/.env';
    }
    return $env_config[$key]??$default;
}

3、使用时类似这样,比如config/mysql.php

return [
    'default' => 'mysql',
    'connections' => [
        'mysql' => [
            'type'        => 'mysql',
            'hostname'    => env('DB_HOST', '127.0.0.1'),
            'database'    => 'workerman_net',
            'username'    => 'root',
            'password'    => env('DB_PASSWORD', '1234456'),
            'hostport'    => '3306',
        ],
    ],
];

注意 config/.env 不提交到版本库(.gitignore里加一行config/.env),然后项目根据环境设置config/.env内容就行了

  • dafa168 2021-11-18

    谢谢老哥。太感谢了。

dafa168

根据老哥的代码实操了一下。 除了env函数名重复改了个名字 envs() ,其他没问题。 感谢老哥了。

  • 暂无评论
dafa168

具体实现如下:
helper.php

/**
 * envs环境参数获取
 * @param $key
 * @param null $default
 * @return mixed|null
 */
function envs($key, $default = null)
{
    static $env_config = [];
    if (!$env_config) {
        $env_config = include base_path() . DIRECTORY_SEPARATOR . '.env.php';
    }
    return $env_config[$key] ?? $default;
}

.env.php

<?php

/*
|--------------------------------------------------------------------------
| app.php
|--------------------------------------------------------------------------
*/
$app = [
    'APP_NAME' => 'webman',
    'APP_ENV' => 'dev',
    'APP_DEBUG' => true,
];

/*
|--------------------------------------------------------------------------
| database.php
|--------------------------------------------------------------------------
*/
$mysql = [
    'DB_HOST' => '127.0.0.1',
    'DB_PORT' => 3306,
    'DB_USER' => 'root',
    'DB_PASSWORD' => 'root',
];

return array_merge($app, $mysql);

database.php

return [
    // 默认数据库
    'default' => 'mysql',

    // 各种数据库配置
    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => envs("DB_HOST", '127.0.0.1'),
            'port' => envs("DB_PORT", 3306),
            'database' => 'test',
            'username' => envs('DB_USER', 'root'),
            'password' => envs('DB_PASSWORD', 'root'),
            'unix_socket' => '',
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
  • 暂无评论