2016-09-09 3 views
5

Symfony3コンソールでは、ユーザがオプションを指定したときに、値を指定せずに指定したことをどのようにして知ることができますか?オプションを供給しないのとは対照的に?Symfony Consoleで値なしでオプションが提供されたかどうかを確認するには?

例として、次のコンソール構成をとります。

<?php 

class MyCommand extends \Symfony\Component\Console\Command\Command 
{ 
    // ... 

    protected function configure() 
    { 
     $this->setName('test') 
      ->setDescription('update an existing operation.') 
      ->addOption(
       'option', 
       null, 
       InputOption::VALUE_OPTIONAL, 
       'The ID of the operation to update.' 
      ); 
    } 
} 

コマンドのヘルプが--option[=OPTION]としてオプションを説明しますので、私はこの次の方法を呼び出すことができます。

bin/console test 
bin/console test --option 
bin/console test --option=foo 

しかし、$input->getOption()は、最初の2つの場合にNULLを返します。 2番目のケースでは、TRUE、またはオプションが提供されたことを示す何かを返すと思いました。

私はオプションが全く提供されておらず、提供されているが価値がないという違いを特定する方法を知らない。

違いを知らせる方法がない場合、InputOption::VALUE_OPTIONALのユースケースは何ですか?

答えて

1
public function addOption($name, $shortcut = null, $mode = null, $description = '', $default = null) 

Symfony\Component\Console\Input\InputInterfaceの周り突き後、私は使用しないオプション、値なしで使用されるオプション、および値と共に使用オプションを区別するための能力を提供getParameterOption()方法を発見しました。

$test = $input->getOption('test'); $rawTest = $input->getParameterOption('--test');

が与えられたコマンドラインに次の値を生成し:

> bin/console some:cmdコ​​マンドの​​方法において

$this->addOption('test', null, InputOption::VALUE_OPTIONAL);

:コマンドのconfigure()方法において

$test =>null

$rawTest =>false

> bin/console some:cmd --test

$test =>null

$rawTest =>null

> bin/console some:cmd --test=something

$test =>"something"

$rawTest =>確認のため"something"

3

あなたは2つのものを一緒に組み合わせています。オプションなしのオプションInputOption::VALUE_NONEとオプションの値InputOption::VALUE_OPTIONALのオプション。

ドキュメントは言う:http://symfony.com/doc/current/console/input.html

、必要に応じて値を受け入れるオプションを指定してコマンドを作成することを禁止するものは何もありません。しかし、オプションがいつ値(コマンド--language)なしで使用されたか、まったく使用されなかったか(コマンド)を区別できる方法はありません。どちらの場合も、オプションで取得された値はnullになります。

これはあなたのケースを正確に表しています。

パラメータが完全に渡されなかった場合、または渡されたが値がない場合は区別できません。それはInputOption::VALUE_NONEのためのものです。

あなたの用途に応じて、console testconsole test --optionの場合に使用されるパラメータのデフォルト値を指定することができます。

また、addOptionは、第2引数としてショートカットを引数にとります。

+1

感謝。まだこの機能が存在するのはなぜですか(あなただけではなく、一般的に)。私。コマンドが値を持っているときにオプションが提供されたことだけを識別できる場合、オプションがオプションの値を持つことができるのはなぜですか?誰かがそれをどのように使い分けていますか? – user2045006

関連する問題