安装软件包时将新的环境变量添加到.env

问题描述

在我们公司中,几个内部项目依赖于相同的复制代码部分来处理与相同API的连接(例如:Google Suite,JIRA等)。为了避免一遍又一遍地为新项目复制相同的代码,我想创建收集这些API类的Symfony软件包。

棘手的部分:我正在寻找一种方法,将必要的env变量自动添加.env,就像Symfony's recipe structure does it一样。但是由于这些项目只能在内部使用,因此对我而言,将其配方配置推送到公共存储库是不行的。添加自定义配方服务器(例如moay的服务器)对我来说很有趣,但是需要在每个项目composer.json中进行其他配置。

是否有更好的方法解决此问题,以便我可以仅在项目中简单定义所需的变量,以便将它们添加.env中而无需任何额外的魔法?

注意:凡需要symfony/flex的地方都可以,因为这应该是我们公司所有新项目的一部分

这些是我要避免的解决方案:

  • 将配置添加到捆绑包/软件包本身,以便将这些配置值置于版本控制下
  • 安装后通过手动运行的任何其他命令添加配置

解决方法

您可以在此过程中使用作曲家事件。安装该软件包后,您可以使用symfony命令将其添加到.env文件中。

https://getcomposer.org/doc/articles/scripts.md

Composer unable to run post install script

symfony composer.json文件中有一个示例。

...
"scripts": {
    "auto-scripts": {
        "cache:clear": "symfony-cmd","assets:install %PUBLIC_DIR%": "symfony-cmd"
    },"post-install-cmd": [
        "@auto-scripts"
    ],"post-update-cmd": [
        "@auto-scripts"
    ]
},...

每次更新或安装后,都将运行此命令“ post-update-cmd,post-install-cmd”。

,

在Symfony中,.env文件现在已提交到存储库中。因此,在上面放上敏感数据不是一个好习惯。

更好的解决方案是创建文件名.env.local。该文件未提交,它会覆盖.env

中的所有环境值

这样您就可以进入.env

MY_SENSITIVE_DATA=mypersonalkey

以及您的.env.local

MY_SENSITIVE_DATA=the_real_sensitive_data

来源:https://symfony.com/doc/current/configuration.html#overriding-environment-values-via-env-local