composer update 在使用自定义值时不断覆盖 parameters.yml

composer update keeps overwriting parameters.yml when using custom values

我的 parameters.yml 中有一些自定义条目,每次我 运行 作曲家更新时,它都想添加丢失的条目,更糟糕的是会覆盖我的自定义条目。我怎样才能阻止它?

例如在作曲家更新之前

#parameters.yml
# Env = GLOBAL
parameters:
# DB settings - GLOBAL
database_driver: pdo_mysql
database_host: 127.0.0.1
database_port: 3306

#mailer settings
mailer_to: yo@yo.com
mailer_from: yo@site.com
mailer_transport: smtp
mailer_subject: ":-| Something is broken!"

# Framework use - GLOBAL
locale: en

之后

#parameters.yml
# This file is auto-generated during the composer install
parameters:
database_driver: pdo_mysql
database_host: 127.0.0.1
database_port: 3306
mailer_transport: smtp
locale: en
database_name: 
database_user: 
database_password: 
mailer_host: 
mailer_user: 
mailer_password: 
secret: 

幸运的是,我的回购和我的 ide 工作文件是两个不同的文件,需要同步。在我 运行 作曲家更新后,当我 运行 同步时,我将所有文件下载到我的 IDE,除了 parameters.yml,那个我推回去覆盖那个那只是自动创建的。

我想消除这种麻烦,因为我将数据库密码保存在 per/env 文件中。

编辑: 当我试图通过将不需要的变量清零来将它们填充为虚拟值时,它也会适得其反。

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Generating autoload files
Updating the "app/config/parameters.yml" file
Some parameters are missing. Please provide them.
database_name: null
database_user: null
database_password: null
mailer_host: null
mailer_user: null
mailer_password: null
secret: null

  [Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException]
  You have requested a non-existent parameter "mailer_from".

Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the post-update-cmd event terminated with an exception

  [RuntimeException]
  An error occurred when executing the "'cache:clear --no-warmup'" command.

自定义参数本身也会导致问题。

所以现在我去看看我新生成的文件,它看起来像这样

# This file is auto-generated during the composer install
parameters:
    database_driver: pdo_mysql
    database_host: 127.0.0.1
    database_port: 3306
    mailer_transport: smtp
    locale: en
    database_name: null
    database_user: null
    database_password: null
    mailer_host: null
    mailer_user: null
    mailer_password: null
    secret: null

但我需要它在重生 ideally 后说的是这个

/**
* my custom comment and copyright/legal tamper warning
*/
#  Env = GLOBAL
parameters:
  # DB settings - GLOBAL
  database_driver: pdo_mysql
  database_host: 127.0.0.1
  database_port: 3306

  #mailer settings
  mail_to: me@site.com
  mail_from: site@site.com
  mail_transport: smtp
  mail_subject: ":-| Something is broken!"

  # Framework use - GLOBAL
  locale: en

我的其余参数位于另一个参数文件中,该文件根据环境加载的内容动态包含,并且每个参数都有不同的数据库信用。

编辑 根据@AlpineCoder 的回答: 我的最新发现为什么添加虚拟值不起作用

当我将它添加到我的 parameters.yml

#dummy values  to avoid regeneration
    database_name: dummyvalue
    database_user: dummyvalue
    database_password: dummyvalue
    mailer_host: dummyvalue
    mailer_user: dummyvalue
    mailer_password: dummyvalue
    secret: dummyvalue

它不再要求我填写这些值,这很好,但是,它仍然重新生成文件,删除我所有的自定义值,给我留下这个

# This file is auto-generated during the composer install
parameters:
    database_driver: pdo_mysql
    database_host: 127.0.0.1
    database_port: 3306
    mailer_transport: smtp
    locale: en
    database_name: dummyvalue
    database_user: dummyvalue
    database_password: dummyvalue
    mailer_host: dummyvalue
    mailer_user: dummyvalue
    mailer_password: dummyvalue
    secret: dummyvalue

如果您将自定义参数(和默认/虚拟值)添加到 parameters.yml.dist 文件,它不会再询问您/覆盖 parameters.yml 文件中的自定义值。

你有两个选择,要么填写你的 parameters.yml.dist,要么你可以转到你的 composer.json 文件,然后在 post-update-cmd 和 post- install-cmd 你应该看到类似

的东西
"Incenteev\ParameterHandler\ScriptHandler::buildParameters",

如果删除该行,当您 运行 composer 时,您的参数将不再更改。

如果您要与其他人合作,更新您的 parameters.yml.dist 可能是更好的方法,因为这有助于提醒他们在引入新参数时需要填写新参数。