2016-06-20 16 views
0

Ich muss in einem Arbeitsverzeichnis eine Composer-Installation nach einer jquery-succes starten (ich entwickle ein Git-Panel unter Silex). Mir wurde gesagt, dass es mit Symfony Console gut gemacht werden kann, weil es einige Optionen behalten kann. Aber ich habe wirklich keine Ahnung, wie ich es nennen soll.Eine "Composer-Installation" in einer Symfony-Konsole durchführen

ich eine Klasse Wich erstreckt Befehl erstellt, ich glaube, ich habe es unter implementieren Methode ausführen ...

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'); 

    } 
} 

Dank für Ihre Hilfe danken ...

Edit: Das versucht:

<?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); 
     } 

    } 
} 

Noch funktioniert nicht ...

+0

1. Sie brauchen kein "name" -Argument (wahrscheinlich einige andere Argumente, aber in diesem Zusammenhang brauchen Sie keinen Namen). 2. Ich denke, Sie müssen Shell-Befehl von Ihrem Befehl aufrufen. – Alex

+0

Shell Exec nimmt nicht die Argumente: Composer Installation --no-interaction – Amelie

+0

Sie können dies überprüfen: https://github.com/composer/composer/issues/1906 – mTorres

Antwort

0

okay, fand ich etwas interessant.

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); 
     } 

    } 
}