我有以下设置:
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变量的权利? - 不,这不是这个。它与变量范围有关。
答案 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和构建参数