首页 文章

在Symfony控制台中执行“composer install”

提问于
浏览
0

我必须在jquery成功之后在一个工作目录中启动一个作曲家安装(我在Silex下开发一个git面板) . 有人告诉我,使用Symfony Console可以做得很好,因为它可以保留一些选项 . 但我真的不知道怎么称呼它 .

我创建了一个扩展Command的类,我想我必须在execute方法下实现它...

class ComposerCommand extends Command
{
    protected function configure()
    {
        $this
            ->setName('composer:install')
            ->setDescription('Composer install')
            ->addArgument()
            ->addOption()
        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $name = $input->getArgument('name');

    }
}

谢谢您的帮助 ...

编辑:试过这个:

<?php
namespace App\Console\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;

class TestCommand extends Command {


    protected function configure() {
        $this->setName("test")
            ->setDescription("Sample description for our command named test")
            ->setDefinition(array(
                new InputOption('flag', 'f', InputOption::VALUE_NONE, 'Raise a flag'),
                new InputArgument('activities', InputArgument::IS_ARRAY, 'Space-separated activities to perform', null),
            ))

            ->setHelp(<<<EOT
The <info>test</info> command does things and stuff
EOT
            );
    }

    protected function execute(InputInterface $input, OutputInterface $output) {
        try {
            \Phar::mapPhar('composer.phar');
            include 'phar://composer.phar/demarrage.php';
        } catch (\Exception $e) {
            throw new \Exception($e);
        }

    }
}

还是行不通......

1 回答

  • 0

    好的,我发现了一些有趣的东西 .

    namespace App\Console\Command;
    
    use Symfony\Component\Console\Command\Command;
    use Symfony\Component\Console\Input\InputInterface;
    use Symfony\Component\Console\Output\OutputInterface;
    use Symfony\Component\Console\Input\InputArgument;
    use Symfony\Component\Console\Input\InputOption;
    use Symfony\Component\Process\Process;
    use Symfony\Component\Process\Exception\ProcessFailedException;
    
    class ComposerCommand extends Command {
    
        /**
         * Configures the console Application
         *
         */
        protected function configure() {
            $this->setName("composer:install")
                ->setDescription("Composer install inside a symfony console.")
                ->addOption('path', 'p', InputOption::VALUE_REQUIRED)
                ->setHelp(<<<EOT
    The <info>composer:install</info> command makes "composer install"
    EOT
                );
        }
    
        /**
         * Executes the console Application
         *
         * @param InputInterface $input
         * @param OutputInterface $output
         * @throws \Exception
         */
        protected function execute(InputInterface $input, OutputInterface $output) {
            try {
                $path = $input->getOption('path');
    
                $process = new Process('php composer.phar install --no-interaction');
                $process->setWorkingDirectory($path);
                $process->run();
    
                // executes after the command finishes
                if (!$process->isSuccessful()) {
                    throw new ProcessFailedException($process);
                }
    
                $output->writeln($process->getOutput());
                $output->writeln($process->getErrorOutput());
            } catch (\Exception $e) {
                throw new \Exception($e);
            }
    
        }
    }
    

相关问题