Как запустить команду Symfony Console после установки композитора?

My composer.json содержит следующее объявление:

    "post-install-cmd": [
        "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
    ],

Я хочу запустить пользовательскую консольную команду, которая у меня есть в src/MyBundle/Command/MyCommand.php. Как добавить это в скрипты для работы в композиторе?

Ответ 1

Вы можете увидеть, как работает перенос postinstall для Sensio DistributionBundle.

В качестве примера, так вы можете вызвать команду Hello World пакета Acme Demo:

ScriptHandler

<?php

namespace Acme\DemoBundle\Composer;

use Composer\Script\CommandEvent;

class ScriptHandler extends \Sensio\Bundle\DistributionBundle\Composer\ScriptHandler {


    /**
     * Call the demo command of the Acme Demo Bundle.
     *
     * @param $event CommandEvent A instance
     */
    public static function helloWorld(CommandEvent $event)
    {
        $options = self::getOptions($event);
        $consoleDir = self::getConsoleDir($event, 'hello world');

        if (null === $consoleDir) {
            return;
        }

//        $extraParam = '';
//        if (!$options['who']) {
//            $extraParam = ' --who';
//        }

        static::executeCommand($event, $consoleDir, 'acme:hello', $options['process-timeout']);
    }

}

Вы можете управлять дополнительным параметром в самом файле json.

composer.json

"post-install-cmd": [
    "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
    "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
    "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
    "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
    "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
    "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles",
    "Acme\\DemoBundle\\Composer\\ScriptHandler::helloWorld"
],

Испытано

Я расширяю класс ScriptHandler пакета распределения sensio версии:

sensio/distribution-bundle (v3.0.18)

надеюсь, что эта помощь