Symfony Flex/Symfony 4同一机器配置测试与开发环境及数据库配置疑问
在Symfony中并行配置开发与测试数据库(替代.env单配置方案)
当然可以!我来一步步教你怎么在Symfony里实现开发和测试数据库的并行配置,完美解决你从Symfony 3过渡过来的困惑:
1. 为测试环境单独配置数据库连接
在config/packages/test/目录下创建doctrine.yaml文件,专门覆盖测试环境的数据库配置:
# config/packages/test/doctrine.yaml doctrine: dbal: # 使用测试环境专属的数据库URL变量 url: '%env(resolve:DATABASE_TEST_URL)%'
这样Symfony在test环境运行时,会优先使用这个配置,而不是默认的config/packages/doctrine.yaml。
2. 配置区分环境的数据库环境变量
你有两种方式来管理不同环境的数据库URL:
方式一:在主.env文件中添加测试变量
直接在.env里同时定义开发和测试的数据库连接:
# .env # 开发环境数据库 DATABASE_URL="mysql://dev_user:dev_pass@127.0.0.1:3306/dev_db?serverVersion=8.0" # 测试环境数据库 DATABASE_TEST_URL="mysql://test_user:test_pass@127.0.0.1:3306/test_db?serverVersion=8.0"
方式二:用.env.test文件隔离测试配置
更推荐这种方式,把测试环境的变量单独放在.env.test文件里,保持主.env干净:
# .env.test # 直接覆盖DATABASE_URL变量,仅在test环境生效 DATABASE_URL="mysql://test_user:test_pass@127.0.0.1:3306/test_db?serverVersion=8.0"
Symfony会自动根据当前环境加载对应的.env文件(test环境优先读.env.test)。
3. 针对不同环境执行命令
现在你可以分别操作开发和测试数据库了,只需要在命令后加上--env=test参数指定环境:
开发环境操作(默认就是dev环境,无需额外参数)
# 创建开发数据库 php bin/console doctrine:database:create # 加载开发环境的fixtures php bin/console doctrine:fixtures:load # 执行开发数据库迁移 php bin/console doctrine:migrations:migrate
测试环境操作
# 创建测试数据库 php bin/console doctrine:database:create --env=test # 加载测试环境的fixtures php bin/console doctrine:fixtures:load --env=test # 执行测试数据库迁移 php bin/console doctrine:migrations:migrate --env=test
这样你就可以在开发电脑上同时维护两个独立的数据库,并行开展开发和测试工作啦!
内容的提问来源于stack exchange,提问作者Sebastian Viereck
相关产品推荐
相关产品推荐

