【发布时间】:2016-01-18 03:34:07
【问题描述】:
我正在使用 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 完全接受空答案?
【问题讨论】:
-
是的,对于 SymfonyStyle,输入似乎是强制性的,而不是使用默认值。检查 SymfonyQuestionHelper 类
-
啊,没有注意到它没有直接使用 Question 类,感谢您指导我。我发现
SymfonyQuestionHelper需要一个有效的值。现在我知道如何继续让它为空,但也保持相同的风格而不破坏 DRY :) 谢谢,@Matteo! -
嗨@Morten,不客气!
-
不得不撤回我关于使用
SymfonyStyle而不破坏DRY的声明...所有属性和一些方法都给出private而不是protected,所以我不能“窃取”它在不违反 DRY 原则的情况下..
标签: php symfony symfony-console