composer - 动态设置参数变量

时间:2016-08-26 11:37:20

标签: php symfony composer-php

我有以下设置:

  • symfony 2.7经典结构

  • 依赖管理的作曲家

我需要做的是在参数运行时使用时间戳在parameters.yml中设置一个变量。

为此,我尝试了以下解决方案:

parameters.yml.dist

   [bla bla bla]
   ran_timestamp: ~


composer.json
   [bla bla bla]
   "scripts": {
       "pre-install-cmd": [
          "export SYMFONY_APP_DATE=$(date +\"%s\")"
       ],
   }
   "extra": {
       "incenteev-parameters": {
          "file": "app/config/parameters.yml",
          "env-map": {              
            "ran_timestamp": "SYMFONY_APP_DATE"
          }
       }
   }

在parameters.yml中设置变量的部分工作正常(使用SYMFONY_APP_DATE env变量中的值创建参数)。

问题是在运行composer时不会更新env变量。任何人都可以帮助我吗?

其他信息:

  • 如果我手动从cli中的pre-install-cmd运行命令,它工作正常(所以命令本身我认为没问题)

  • 我看到命令在启动安装后在composer中运行,所以我认为它已执行(下面的输出):

  

$ composer install

     

导出SYMFONY_APP_DATE = $(日期+“%s”)

     

使用包信息[bla bla bla]

加载作曲家存储库
  • 未报告错误

  • 我假设也许作曲家没有设置env变量的权利? - 不,这不是这个。它与变量范围有关。

1 个答案:

答案 0 :(得分:7)

问题显然是你在子进程中设置env参数(为每个脚本创建),但是不能从子进程重新定义父进程的env参数(即设置env)作曲家本身的一个脚本的价值)

我认为你需要扩展\ Incenteev \ ParameterHandler \ ScriptHandler :: buildParameters来实现它。

UPD:我找到了实现目标的方法

仅为composer.json

中的build-params定义一个特殊块

"scripts": { "build-params": [ "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters" ],

而不是post-install-cmd阻止而不是Incenteev\\ParameterHandler\\ScriptHandler::buildParameters使其成为

"export SYMFONY_APP_DATE=$(date +\"%s\") && composer run-script build-params"

这将在同一过程中创建env var和构建参数