Symfony 5 全局动态配置文件
Symfony 5 global dynamic configuration file
我是 Zend Framework 的长期用户(现在更名为 Laminas)。但我决定尝试最后一个 Symfony 版本。所以我只是在5.1.2安装它。
我遇到了有关多环境部署的问题。在我公司,我们有:
- 开发者电脑本地环境
- 发展。
- 分期。
- 生产。
在 ZF-Laminas 中,我们有一个位于配置目录中的 global.php 文件。
对于那些不熟悉此框架的人,您可以通过创建 local.php 文件来覆盖 global.php 文件中设置的键。
在这个全局文件中,我用来为我的应用程序放置标准配置。
例如(产品):
'open_id' => [
'client_id' => 1234
]
然后,我有开发和暂存文件,这些文件可以覆盖每个环境的这些值。部署时将环境对应的文件复制到local.php.
比方说 staging.local.php.dist 变成 local.php with :
'open_id' => [
'client_id' => 5678
]
这很好,因为值覆盖了全局文件中的值。
我希望在 Symfony 中有相同的行为,但我在 Symfony 5 中看不到类似的东西。
到目前为止,我只找到了两种可能
创建一个包,让我在 config/packages 目录中有一个 .yaml 文件。根据文档 (https://symfony.com/doc/current/configuration.html#configuration-files),我将能够覆盖开发、生产和暂存。但这迫使我创建一个包来处理一些标准配置,这是巨大的。
使用 .env 文件。但是 .env 文件只允许字符串数据,而不是像数组这样的复杂数据。
我想念什么?还是我的“zend”做事方式不对?
谢谢。
根据我从您的 post 了解到的情况,您的目标是根据您所在的服务器获得不同的配置值。如果是这种情况,您可以使用环境变量(在 .env 文件或服务器特定配置的 .env.local 中)。然后,您可以通过将 env var 绑定到参数来在您的应用程序中使用这些值。然后,通过使用 %parameter_name%
作为值或在容器中,此参数将在配置中可用。您还可以将参数传递给服务(服务定义的处理方式与任何其他配置相同)。有关更多信息,您可以查看这些来源:
https://symfony.com/doc/current/configuration/env_var_processors.html
https://symfony.com/doc/current/configuration.html
您还可以为每个环境创建 services_%env%.yaml (services_dev.yaml
, services_test.yaml
) 文件。它将允许您为每个环境定义不同的参数和 override/define 服务。
示例:
config/services_dev.yaml
parameters:
hello: 'world'
我是 Zend Framework 的长期用户(现在更名为 Laminas)。但我决定尝试最后一个 Symfony 版本。所以我只是在5.1.2安装它。
我遇到了有关多环境部署的问题。在我公司,我们有:
- 开发者电脑本地环境
- 发展。
- 分期。
- 生产。
在 ZF-Laminas 中,我们有一个位于配置目录中的 global.php 文件。 对于那些不熟悉此框架的人,您可以通过创建 local.php 文件来覆盖 global.php 文件中设置的键。
在这个全局文件中,我用来为我的应用程序放置标准配置。
例如(产品):
'open_id' => [
'client_id' => 1234
]
然后,我有开发和暂存文件,这些文件可以覆盖每个环境的这些值。部署时将环境对应的文件复制到local.php.
比方说 staging.local.php.dist 变成 local.php with :
'open_id' => [
'client_id' => 5678
]
这很好,因为值覆盖了全局文件中的值。
我希望在 Symfony 中有相同的行为,但我在 Symfony 5 中看不到类似的东西。
到目前为止,我只找到了两种可能
创建一个包,让我在 config/packages 目录中有一个
.yaml 文件。根据文档 (https://symfony.com/doc/current/configuration.html#configuration-files),我将能够覆盖开发、生产和暂存。但这迫使我创建一个包来处理一些标准配置,这是巨大的。 使用 .env 文件。但是 .env 文件只允许字符串数据,而不是像数组这样的复杂数据。
我想念什么?还是我的“zend”做事方式不对?
谢谢。
根据我从您的 post 了解到的情况,您的目标是根据您所在的服务器获得不同的配置值。如果是这种情况,您可以使用环境变量(在 .env 文件或服务器特定配置的 .env.local 中)。然后,您可以通过将 env var 绑定到参数来在您的应用程序中使用这些值。然后,通过使用 %parameter_name%
作为值或在容器中,此参数将在配置中可用。您还可以将参数传递给服务(服务定义的处理方式与任何其他配置相同)。有关更多信息,您可以查看这些来源:
https://symfony.com/doc/current/configuration/env_var_processors.html
https://symfony.com/doc/current/configuration.html
您还可以为每个环境创建 services_%env%.yaml (services_dev.yaml
, services_test.yaml
) 文件。它将允许您为每个环境定义不同的参数和 override/define 服务。
示例:
config/services_dev.yaml
parameters:
hello: 'world'