11

Symfony3 コンソールでは、ユーザーがオプションを提供したが、値なしで提供したことをどのように知ることができますか? オプションをまったく提供しないのではなく?

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

<?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

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

したがって、オプションがまったく提供されていない場合と、提供されているが値がない場合の違いを識別する方法がわかりません。

違いを見分ける方法がない場合、ユースケースはInputOption::VALUE_OPTIONAL何ですか?

4

3 に答える 3

7

6/10/21 に編集: これは Symfony 3.3 以下にのみ適用されます。正解はScorpioT1000が提供するものになりました

をざっと調べた後、使用されていないオプション、値なしで使用されているオプション、および値とともに使用されているオプションを区別する機能を提供する方法Symfony\Component\Console\Input\InputInterfaceを発見しました。getParameterOption()

コマンドのconfigure()メソッド:

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

コマンドのexecute()メソッド:

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

指定されたコマンド ラインに対して次の値を生成します。

> bin/console some:cmd

$test=>null

$rawTest=>false

> bin/console some:cmd --test

$test=>null

$rawTest=>null

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

$test=>"something"

$rawTest=>"something"

于 2017-11-03T05:50:56.277 に答える
7

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

ドキュメントには次のように書かれています: http://symfony.com/doc/current/console/input.html

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

これはまさにあなたのケースを説明しています。

パラメータがまったく渡されなかったのか、渡されたが値が指定されていなかったのかを区別することはできません。そのInputOption::VALUE_NONEために作られました。

console testユースケースに応じて、およびケースで使用されるパラメーターのデフォルト値を指定できますconsole test --option

addOptionまた、2 番目の引数としてショートカットを引数として取ることに注意してください。

public function addOption($name, $shortcut = null, $mode = null, $description = '', $default = null)
于 2016-09-09T08:32:41.313 に答える