环境变量 (Env)
Anon Framework Next 提供了对 .env 文件的原生支持。当前推荐将结构化配置写在 anon.config.php 中,而将 .env 用作敏感值和环境差异值的来源。
默认情况下,项目骨架在根目录下会包含一个 anon.config.php 与 .env。
分层环境文件
框架现已支持类似 Vite 的分层环境文件加载方式:
.env.env.local.env.development.env.production.env.{APP_ENV}.local
加载顺序如下:
.env.env.local.env.{APP_ENV}.env.{APP_ENV}.local
后加载的文件会覆盖前面的值;如果某个变量已经由系统环境变量、部署平台或 CLI 显式注入,则不会被 .env* 文件覆盖。
推荐搭配
anon.config.php:推荐写成结构化配置,业务代码统一通过Config::get()读取;如果配置文件里需要读取环境值,优先使用Env::get()。.env:由于只用于管理敏感值,推荐仅保留DATABASE_、JWT_SECRET、第三方密钥这类环境差异值,不要把所有业务配置都塞回.env。
推荐不要在业务代码里直接依赖裸 getenv(),因为线上环境可能禁用了 putenv(),或者只通过 $_ENV / $_SERVER 暴露变量。框架已经提供了更稳妥的 Env::get() 读取链。
基础配置
默认骨架中的 .env 保持极致简洁:
env
[DATABASE]
DATABASE_TYPE=mysql
DATABASE_URL=127.0.0.1
DATABASE_PORT=3306
DATABASE_USER=root
DATABASE_PASSWORD=
DATABASE_NAME=anon如果项目后续需要接入更多受 .env 保护的敏感配置,再逐步往里加即可。
APP_ENV 环境变量
APP_ENV 代表了当前应用程序的运行环境标识 (Application Environment)。常见的定义有:
local(本地开发环境):往往开启详细的报错信息、使用本地轻量级的缓存驱动。testing(测试环境):通常用于持续集成 (CI) 或专门的测试服务器。staging(预发布环境):代码发布到正式生产服务器前的一个环境,配置与生产环境几乎一模一样。production(正式生产环境):必须关闭所有的调试报错信息,开启严格的缓存和性能优化配置。
在业务代码中,你可以通过判断该标识来执行不同的逻辑:
php
use Anon\Core\Facade\Env;
if (APP_ENV === 'local') {
// 调用 Mock 接口
} else {
// 调用真实线上接口
}全局常量
框架在启动时,会自动将最常用的几个环境变量解析并挂载为 PHP 全局常量,方便在项目的任何地方直接使用,无需反复调用 Env::get():
APP_NAME:应用名称。APP_ENV:运行环境。APP_URL:应用外网访问地址(未定义时会自动根据当前 HTTP 请求智能推导)。DEBUG_MODE:调试模式布尔值(为true时发生致命错误会直接在页面上打印错误堆栈)。
php
// 直接使用全局常量
echo "当前环境: " . APP_ENV;
echo "访问地址: " . APP_URL;
if (DEBUG_MODE) {
// ...
}获取环境变量
你可以通过 Anon\Core\Facade\Env 门面来获取环境变量。
php
use Anon\Core\Facade\Env;
// 获取 DEBUG_MODE,如果不存在则返回 false
$isDebug = Env::get('DEBUG_MODE', false);如果你需要读取结构化配置,请优先使用 Config 门面:
php
use Anon\Core\Facade\Config;
$cacheDriver = Config::get('cache.default', 'file');数据类型自动转换
.env 文件中所有的值本质上都是字符串,但 Env 组件在解析时会自动将其转换为 PHP 的标量类型:
true,on,yes会被转换为布尔值truefalse,off,no会被转换为布尔值falsenull,empty会被转换为null- 纯数字会被转换为对应的
int或float
动态设置环境变量
你也可以在运行时动态修改或追加环境变量。修改后的变量会被同步设置到 PHP 原生的 $_ENV 以及 putenv() 中。
php
use Anon\Core\Facade\Env;
// 动态设置环境标识
Env::set('APP_ENV', 'production');