php - 如何使用 Symfony 控制台识别是否提供了没有值的选项?

标签 php symfony symfony-console

使用 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

但是,在前两种情况下,$input->getOption() 将返回 NULL。我预计在第二种情况下它会返回 TRUE,或者表明已提供该选项的内容。

所以我不知道如何区分根本没有提供的选项和提供了但没有值的选项。

如果无法区分,InputOption::VALUE_OPTIONAL 的用例是什么?

最佳答案

从 Symfony 3.4 开始,您只需将默认设置为 false 并检查:

  1. 如果值为false,则选项不存在
  2. 如果值为null,则该选项存在但没有值
  3. 否则它有它的值(value)

例如

$this->addOption('force', null, InputOption::VALUE_OPTIONAL, 'Force something', false);

$force = $input->getOption('force') !== false;

关于php - 如何使用 Symfony 控制台识别是否提供了没有值的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39406733/

相关文章:

php - 从数据库中检索数据并在得到分隔符时分隔数据?

php - 表单未创建发布变量

php - 使用 Symfony 控制台 (CTRL+C) 捕获终端终止/退出

javascript - 简单的 Joomla 插件或模块可将预制文本打印到文本编辑器中

PHP 提取分隔符之间的字符串允许重复

symfony - 控制台命令中未调用监听器

Symfony2 Doctrine2 与可选的一对一关系存在问题

php - DQL 选择具有一列 MAX 值的每一行

symfony - 如何对控制台的命令输入验证器进行功能测试

php - 如何隐藏或删除默认可用的控制台命令?