PHPackages                             dleno/hyperf-env-multi - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. dleno/hyperf-env-multi

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

dleno/hyperf-env-multi
======================

v3.1.3(1w ago)127.2k↑198.6%1MITPHPPHP &gt;=8.1

Since Sep 7Pushed 1w ago1 watchersCompare

[ Source](https://github.com/DlenoDing/hyperf-env-multi)[ Packagist](https://packagist.org/packages/dleno/hyperf-env-multi)[ RSS](/packages/dleno-hyperf-env-multi/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (3)Dependencies (16)Versions (5)Used By (1)

dleno/hyperf-env-multi
======================

[](#dlenohyperf-env-multi)

Hyperf 多环境 `.env` 加载组件。

该组件在 Hyperf 默认 `.env` 基础上，按当前 `APP_ENV` 加载 `.env.`，并提供可显式调用的 `EnvLoader`。当其他包需要在自己的 `ConfigProvider` 中读取 `env()` 时，可以先调用 `EnvLoader`，确保读到的是环境覆盖后的值。

功能
--

[](#功能)

- 默认加载 `.env`。
- 当 `APP_ENV` 有值时，额外加载 `.env.`。
- `.env.` 中的同名变量会覆盖 `.env` 中的值。
- `BootApplication` 阶段通过 `MultiEnvListener` 重新合并项目配置文件，让 `config/config.php`、`config/server.php`、`config/autoload/*.php` 读取到环境覆盖后的值。
- 提供 `Dleno\HyperfEnvMulti\EnvLoader::load()`，供需要在 `BootApplication` 之前读取 `env()` 的包自行调用。
- 不清理 `Hyperf\Config\ProviderConfig` 缓存，避免对全局配置构建流程产生不可控影响。

安装
--

[](#安装)

```
composer require dleno/hyperf-env-multi
```

Composer 会通过 `extra.hyperf.config` 自动注册 `ConfigProvider`。

加载规则
----

[](#加载规则)

假设项目根目录存在：

```
.env
.env.local

```

`.env`：

```
APP_ENV=local
ENABLE_WS=false
REDIS_HOST=localhost
```

`.env.local`：

```
ENABLE_WS=true
REDIS_HOST=redis
```

运行时结果：

```
APP_ENV=local
ENABLE_WS=true
REDIS_HOST=redis

```

`.env.` 不存在时不会报错，也不会改变 `.env` 的加载结果。

显式加载
----

[](#显式加载)

如果某个包会在自己的 `ConfigProvider::__invoke()` 中调用 `env()`，而这个调用发生在 Hyperf 完成 `BootApplication` 事件之前，就应在读取 `env()` 前显式调用：

```
