https://wenda.workerman.net/question/7503 https://wenda.workerman.net/question/7534
现在开发项目确实需要一个切换环境的组件,希望大佬能安排下。谢谢。
这个就几行代码,感觉用不着什么组件
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内容就行了
config/.env
谢谢老哥。太感谢了。
根据老哥的代码实操了一下。 除了env函数名重复改了个名字 envs() ,其他没问题。 感谢老哥了。
具体实现如下: 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, ],
mark一下
学习了
可以模仿VUE 的环境分 .env .env.development .env.proudction 根据 .env 中的 WENMAN_ENV='development' 决定 是开发还是生产
.env
.env.development
.env.proudction
WENMAN_ENV='development'
WENMAN_ENV='development' APP_DEBUG=true SERVER_PROCESS_GROUP='' SERVER_PROCESS_USER='' SESSION_DRIVER=file DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=test DB_USERNAME=root DB_PASSWORD=123456 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=test DB_USERNAME=root DB_PASSWORD='tech' REDIS_HOST=223.3445.322 REDIS_PASSWORD='m@redis' REDIS_PORT=5769 REDIS_DATABASE=1 SERVER_LISTEN= 'http://0.0.0.0:8787' SERVER_NAME= 'WMS' SERVER_COUNT= 8
development 或 production 的配置如果和env的重复,自动覆盖,唯一不好的就是需要在 start.php 中添加
start.php
if (file_exists(base_path().'/.env')) { // 解析env文件,name = PHP_KEY $env = parse_ini_file(base_path().'/.env', true); if (isset($env['WENMAN_ENV'])) { $_env = parse_ini_file(base_path().'/.env.'.$env['WENMAN_ENV'], true); $env = array_merge($env, $_env); } foreach ($env as $key => $val) { if (is_array($val)) { //如果是二维数组 item = PHP_KEY_KEY foreach ($val as $k => $v) { $item = $key . '_' . $k; putenv("$item=$v"); } } else { putenv("$key=$val"); } } } ```php 然后写个function 获取env的配置,就可以在 config中使用了 。 ```js function cf_env($key, $default = null) { $value = getenv($key, true); if ($value === false) { return $default; } }
挺好的。只是我这边没有推送到_ENV 中。
这个就几行代码,感觉用不着什么组件
1、config/下建立个 .env 文件,内容类似
2、support/helper.php 里添加一个函数比如
3、使用时类似这样,比如config/mysql.php
注意
config/.env
不提交到版本库(.gitignore里加一行config/.env),然后项目根据环境设置config/.env
内容就行了谢谢老哥。太感谢了。
根据老哥的代码实操了一下。 除了env函数名重复改了个名字 envs() ,其他没问题。 感谢老哥了。
具体实现如下:
helper.php
.env.php
database.php
mark一下
学习了
学习了
可以模仿VUE 的环境分
.env
.env.development
.env.proudction
根据
.env
中的WENMAN_ENV='development'
决定 是开发还是生产.env
.env.development
development 或 production 的配置如果和env的重复,自动覆盖,唯一不好的就是需要在
start.php
中添加挺好的。只是我这边没有推送到_ENV 中。