使用作曲家的交互式PHP脚本

时间:2018-10-08 08:28:05

标签: php symfony composer-php symfony4 post-install

我想在composer update文件中的composer installcomposer.json之后自动运行一个交互式PHP脚本,例如:

"scripts": {
    "raven-cmd": [
        "php bin/console kolesar:boilerplate:setup"
    ],
    "auto-scripts": {
        "cache:clear": "symfony-cmd",
        "assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd",
        "assets:install %PUBLIC_DIR%": "symfony-cmd"
    },
    "post-install-cmd": [
        "@auto-scripts",
        "@kolesar-cmd"
    ],
    "post-update-cmd": [
        "@auto-scripts",
        "@kolesar-cmd"
    ]
},

Symfony命令php bin/console kolesar:boilerplate:setup是交互式脚本,需要一些用户输入,但这不起作用。交互式模式无法正常工作。

任何提示,如何解决?还是在composer update/install之后强制设置另一个想法?

2 个答案:

答案 0 :(得分:1)

您只需在脚本调用后加上“ < /dev/tty”即可。

https://pantheon.io/blog/writing-composer-scripts

  

可能会影响某些命令的另一个区别是,当直接从shell运行脚本时,标准输入将附加到TTY,但是在通过Composer运行时将是重定向的输入流。这会产生各种影响。例如,如果没有附加的TTY,Symfony控制台将不会调用interact()方法。例如,如果您试图编写测试交互性的功能测试(例如合并/带注释的命令项目),则可能会遇到问题。有几种解决此问题的方法。首先是明确指定在运行命令时标准输入应来自TTY

     

这有效地使Symfony控制台再次调用interact()方法;但是,此选项的缺点是它不那么可移植

我刚刚尝试过,它可以按预期工作。

请注意,如果对您很重要,链接的文章还提供了更便于携带的版本。

答案 1 :(得分:0)

在Windows上,在命令末尾添加< CON