2

我正在使用 symfony 控制台包,在该包中我让它在执行命令时请求一个值,也就是在public function execute(...).

当试图向用户询问某事时,我认为如果您不制作自己的自定义样式,这是两种不同的方法。a)使用问题助手,b)使用预定义的样式,因此SymfonyStyle
我开始使用SymfonyStyle运行简单ask("question here"),如果我没有给它一个值,它会一直给我错误。如果我改为使用帮助程序,直接创建问题,那么它将允许我给它一个空值。

下面是一些例子:

# SomeCommand.php
namespace What\A\Command;

use Symfony\Component\Console\Question\Question;
use Symfony\Component\Console\Style\SymfonyStyle;

// ...
public function execute(InputInterface $input, OutputInterface $output)
{
    // ...

    // With the helper, which allows empty answer
    $helper = $this->getHelper('question');
    $q = new Question('Question here');

    dump($helper->ask($input, $output, $q));
    // Output:
    // Question here
    // null


    // With SymfonyStyle which DOES NOT allow empty answer
    $io = new SymfonyStyle($input, $output);
    dump($io->ask("Question here"));
    // Output:
    // Question here:
    // [ERROR] A value is required.
}

查看 的文件SymfonyStyle,看起来它在验证方面并没有太大的不同,正如班级所说,它只是样式。那么有什么我遗漏的东西是这两者之间的区别吗?是否有可能实现SymfonyStyle完全接受空洞的答案?

4

3 回答 3

0

这就是我在这种情况下使用的:(这是类 where 的摘录$this->io= new SymfonyStyle($input, $output))。

在我的用例中,占位符不太可能出现在用户输入中。

public function askAllowEmpty($question, $default)
    {
        $placeholder = \uniqid("placeholder");
        $field = $this->io->ask($question, $default, function($string) use ($placeholder) {
               return (null == $string)? $placeholder : $string;
        });
        return str_replace($placeholder, null, $field);
    }
于 2016-08-17T01:59:08.317 回答
0

这实际上非常简单,只要您了解问题可以得到错误响应但不能得到空响应。使用 SymfonyStyle,这可以在一行中完成:

$answer = $this->io->ask("Ask a question?", false) ?: null);

当然,这假设您不需要错误的响应。

于 2018-11-12T09:04:52.023 回答
0

我的解决方案:

$question = new Question(
    "Please insert a value",
    false
);

$userInput = $io->askQuestion($question);


$finalValue = $userInput ? $userInput : null;

当用户没有插入任何东西时,最后一行需要实际制作$finalValuenull(而不是)。false

于 2016-10-20T12:27:12.977 回答