https://wenda.workerman.net/question/7503
https://wenda.workerman.net/question/7534
現(xiàn)在開發(fā)項目確實需要一個切換環(huán)境的組件,希望大佬能安排下。謝謝。
這個就幾行代碼,感覺用不著什么組件
1、config/下建立個 .env 文件,內容類似
return [
'DB_HOST' => '這寫數(shù)據(jù)庫地址',
'DB_PASSWORD' => '這里寫密碼'
];
2、support/helper.php 里添加一個函數(shù)比如
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),然后項目根據(jù)環(huán)境設置config/.env
內容就行了
具體實現(xiàn)如下:
helper.php
/**
* envs環(huán)境參數(shù)獲取
* @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 [
// 默認數(shù)據(jù)庫
'default' => 'mysql',
// 各種數(shù)據(jù)庫配置
'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,
],
可以模仿VUE 的環(huán)境分 .env
.env.development
.env.proudction
根據(jù) .env
中的 WENMAN_ENV='development'
決定 是開發(fā)還是生產
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
中添加
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)) {
//如果是二維數(shù)組 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;
}
}