Symfony欧宝娱乐app下载地址 5.3新增功能:在单个文件中配置多个环境
2021年5月7日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。欧宝娱乐app下载地址有些信息可能已经过时了。阅读最新的Symfony文档欧宝娱乐app下载地址.
提供的
尼古拉斯Grekas
在# 40214而且# 40782.
欧宝娱乐app下载地址Symfony定义了不同配置环境因此,您可以根据应用程序的运行位置(例如,在您的开发机器本地,在生产服务器等)来改变应用程序的行为。
应用于所有环境中的包/包的选项定义在配置/包/
中定义了每个环境的特定选项/ <环境> / config /包
.
这工作得很好,但是当环境之间的差异很小时,这就很麻烦了,因为您需要创建/维护另一个配置文件来更改一些配置选项。
这就是为什么在Symfony欧宝娱乐app下载地址 5.3中你也可以在一个文件中定义不同环境的选项.要使用的确切语法取决于配置文件的格式。
在YAML配置文件中,使用when@……
特殊的关键:
12 3 4 5 6 7 8 9 10 11 12 13 14
#配置/包/ webpack_encore.yamlwebpack_encore:#……output_path:“% kernel.project_dir % /公共建设”strict_mode:真正的缓存:假when@prod:webpack_encore:缓存:真正的when@test:webpack_encore:strict_mode:假
在XML配置中,将配置包装在new<当>
标签:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
<!——config/packages/webpack_encore.xml——> .xml<??> . xml version="1.0" encoding="UTF-8"<容器xmlns=“…”><webpack-encore:配置><!——……-->webpack-encore:配置><当env=“刺激”><webpack-encore:配置><!——……-->webpack-encore:配置>当><当env=“测试”><webpack-encore:配置><!——……-->webpack-encore:配置>当>容器>
在PHP配置文件中,使用newenv ()
方法检查应用程序正在哪个环境中运行:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ /配置/包/ framework.php使用欧宝娱乐app下载地址\组件\DependencyInjection\加载程序\配置器\ContainerConfigurator;使用欧宝娱乐app下载地址\配置\FrameworkConfig;返回静态函数(FrameworkConfig$框架, ContainerConfigurator$容器){/ /……如果(“刺激”= = =$容器->env ()) {/ /……}如果(“测试”= = =$容器->env ()) {$框架->测试(真正的);$框架->会话()->storageFactoryId (“session.storage.mock_file”);}};
这种语法也只适用于在某些环境中定义路由和服务。你甚至可以在一个文件中合并所有的包来配置一些包和创建服务,但只适用于某些环境:
1 2 3 4 5 6 7 8 9 10 11
框架:秘密:' % env (APP_SECRET) %when@dev:服务:App \ SomeServiceForDev:~when@test:框架:测试:真正的#……
在未来,每个环境使用一个配置文件的传统方法将继续有效,但我们鼓励您尝试使用这个新特性,以减少要维护的配置文件数量。
最后,类现在可以使用PHP属性来告诉它们只应该在某些环境中注册为服务:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用欧宝娱乐app下载地址\组件\DependencyInjection\属性\当;#(当(env:“开发”))类SomeClass{/ /……}//你可以在同一个类中应用多个属性:#(当(env:“开发”))#(当(env:“测试”))类AnotherClass{/ /……}
发表在#生活在边缘
评论
值得注意的是,当您使用PHP配置时,必须考虑包在环境中的可用性。
WebProfilerBundle通常只适用于'dev'和'test'环境,因此WebProfilerConfig类不会为'prod'创建,也不能用于config/packages目录。
WebProfilerBundle通常只适用于'dev'和'test'环境,因此WebProfilerConfig类不会为'prod'创建,也不能用于config/packages目录。
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now