2013-12-16 4 views
0

Моя консольная команда имеет два параметра (а не аргументы).Как настроить параметры для команды консоли

Это мои коды команд

class crawlerCommand extends ContainerAwareCommand 
{ 
    protected function configure() 
    { 
     $this 
     ->setName('top:crawler') 
     ->setDescription('Greet someone') 
     ->addOption('opt1', null, InputOption::VALUE_REQUIRED, 'option1') 
     ->addOption('opt2',null, InputOption::VALUE_OPTIONAL, 'option2'); 

я пытаюсь вызвать команду от контроллера

для примера я хочу сделать эту консольную команду от контроллера

$ app/console top:crawler --opt1=s --opt2=2 

поэтому Я сделал этот код.

public function indexAction(){ 

    $command = $this->get('crawlerCommandService'); 

    $inputDefinition = new InputDefinition(array(
      new InputOption('opt1', 's', InputOption::VALUE_OPTIONAL), 
      new InputOption('opt2', '2', InputOption::VALUE_OPTIONAL), 
    )); 
    $input = new ArgvInput(array('argv' => 'app')); 
    $input->bind($inputDefinition); 
    $output = new ConsoleOutput(); 
    $returnCode = $command->run($input, $output); 

Однако он не работает.

Просьба дать некоторый намек.

Я могу решить проблему, используя ArrayInput вместо ArgvInput.

Здесь я записываю код.

$command = $this->get('crawlerCommandService'); 

    $output = new ConsoleOutput(); 
    $arguments = array(
     '--opt1' => 's', 
     '--opt2' => '2' 
    ); 
    $input = new ArrayInput($arguments); 
    $returnCode = $command->run($input, $output); 
+0

Какая польза от вызова команды? Конечно, если вы хотите повторить логику, тогда у вас будет все это в службе, которую вы можете вызвать отдельно. Насколько я вижу. – qooplmao

ответ

1

Первый элемент массива, переданного в конструкторе имя запущенного приложения, как описано в documentation

И глядя на код, вы можете передать что-нибудь в качестве первого элемента, если вы вручную создавая его.

$input = new ArgvInput(array(
    'app' => 'something', 'arg1' => 'val1', 'arg2' => 'val2' 
)); 
+0

Спасибо, я понимаю ваше объяснение, первый элемент не имеет смысла. Однако моя команда не имеет аргументов, но options.I хотел бы знать, как передать значения параметров для команды. – whitebear

+0

Попробуйте один из них. 'новый ArgvInput (массив ('app', '-opt1 = val1', 'opt2 = val2'))' или 'new ArgvInput (array ('app' => 'something', '-opt1' => 'val1' , '-opt2' => 'val2'))) – praxmatig

Смежные вопросы