【问题标题】:Symfony 5 global dynamic configuration fileSymfony 5 全局动态配置文件
【发布时间】:2020-07-07 13:21:58
【问题描述】:

我是 Zend Framework 的长期用户(现在更名为 Laminas)。但我决定尝试上一个 Symfony 版本。所以我只是在5.1.2中安装了它。

我面临一个关于多环境部署的问题。在我的公司,我们有:

  • 本地环境,即开发者电脑。
  • 发展。
  • 暂存。
  • 生产。

在 ZF-Laminas 中,我们有一个 global.php 文件,它位于 config 目录中。 对于不熟悉这个框架的人,可以通过创建 local.php 文件来覆盖 global.php 文件中的键集。

在这个全局文件中,我用来放置我的应用程序的标准配置。

例如(产品):

'open_id' => [
   'client_id' => 1234
]

然后,我有开发和暂存文件,其中汽车会覆盖每个环境的这些值。部署时将环境对应的文件复制到local.php中。

假设 staging.local.php.dist 变成 local.php :

'open_id' => [
   'client_id' => 5678
]

这很好,因为值会覆盖全局文件中的值。

我希望在 Symfony 中具有相同的行为,但在 Symfony 5 中没有看到类似的东西。

到目前为止,我只发现了两种可能

  • 创建一个包,它允许我在 config/packages 目录中有一个 .yaml 文件。根据文档 (https://symfony.com/doc/current/configuration.html#configuration-files),我将能够拥有 dev、prod 和 staging 覆盖。但它迫使我创建一个捆绑包来处理一些标准配置,这是巨大的。

  • 使用 .env 文件。但是 .env 文件只允许字符串数据,而不是像数组这样的复杂数据。

我想念什么?还是我的“zend”做事方式是错误的?

谢谢。

【问题讨论】:

    标签: php deployment config symfony5


    【解决方案1】:

    您还可以为每个环境创建 services_%env%.yaml(services_dev.yamlservices_test.yaml)文件。它将允许您为每个环境定义不同的参数并覆盖/定义服务。

    示例: config/services_dev.yaml

    parameters:
        hello: 'world'
    

    【讨论】:

    • 在 Syfmony 5 中似乎不再有可能,但谢谢。
    • 不应该,我在我的 Symfony5 项目中使用它。试试bin/console about 看看你的kernel.environment 是否正确
    • 好吧,你是对的。我喜欢这个解决方案!在 cache:clear 之后,它看到了我的 services_dev.yaml 文件。但我仍然无法在文档中找到它,这有点奇怪。
    • 也找不到。这很奇怪,因为这个功能在很早的框架版本中就已经实现了。在这里找到一个提及symfony.com/doc/current/testing.html#accessing-the-container,仅此而已...
    • 这种加载服务文件的方法是在 Kernel.php 中完成的。您可以在 github 上的演示项目中看到这一点:github.com/symfony/demo/blob/master/src/Kernel.php
    【解决方案2】:

    根据我从您的帖子中了解到的情况,您的目标是根据您所在的服务器设置不同的配置值。如果是这种情况,您可以使用环境变量(在 .env 文件或 .env.local 中用于服务器特定配置)。然后,您可以通过将 env var 绑定到参数来在应用程序中使用这些值。然后,此参数将在配置中使用 %parameter_name% 作为值或在容器中可用。您还可以将参数传递给服务(服务定义的处理方式与任何其他配置相同)。有关更多信息,您可以查看以下来源: https://symfony.com/doc/current/configuration/env_var_processors.html https://symfony.com/doc/current/configuration.html

    【讨论】:

    • 感谢您的回复。是的,这是我看到的,但我很惊讶没有动态配置文件。据我所知,这在 SF3 中是可能的。
    • 您能否更具体地说明“动态配置”的含义?
    • 基于环境的动态配置(dev/staging/prod)。
    • 抱歉我反应迟了。为此,您可以根据内核中的配置加载配置文件。这已经通过默认安装完成,您应该能够添加一个只会在您的开发环境中加载的 config_dev.yaml。测试和产品也是如此。如果您想创建另一个环境(例如 staging),您可以为该环境添加一个配置文件,例如 config_staging.yml 并且它应该可以工作。
    猜你喜欢
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 2016-06-22
    • 2022-11-24
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多