开发的过程中需要至少本地、测试和生产三个环境,开发和测试需要更多的调试信息和日志等数据,生产环境则需要最好的性能。另外部分连接(数据库)地址生产与本地也不相同,这就需要不同的环境中使用不同的配置。
在所有环境中,如果存在以下文件,程序自动加载
后者优先于前者:
- .env 包含应用所需环境变量的默认值
- .env.local 本地文件,具有本地覆盖
- .env.$APP_ENV 特定环境的配置文件
- .env.$APP_ENV.local 本地特定于环境的覆盖
运行的环境变量覆盖 .env 文件。
第一步构建一个开发环境:
#从.env 复制一个新的环境变量
composer dump-env local
#检查
php bin/console debug:dotenv
修改环境变量配置文件,设置参数
# .dev.env
# 设置对应的参数
APP_ENV=dev
APP_SECRET=isasecretvalue
配置文件所在目录
symfony62/
├─ config/
│ ├─ packages/
│ ├─ ├─ framework.yaml
│ ├─ bundles.php
│ ├─ routes.yaml
│ └─ services.yaml
├─ ...
routes.yaml 定义路由;
services.yaml 服务;
bundles.php 应用程序包启用;
环境变量可以在packages文件下的配置文件中被调用
framework:
secret: '%env(APP_SECRET)%'
根据不同的环境变量选择不同的配置内容
framework:
secret: '%env(APP_SECRET)%'
#开发环境密钥未123456
when@dev:
framework:
secret: '123456'
与环境变量类似的还有一个参数功能,在services.yaml文件中配置
# config/services.yaml
parameters:
app.admin_email: 'something@example.com'
可以通过变量名称被读取到
framework:
secret: '%env(APP_SECRET)%'
email_address: '%app.admin_email%'