对话框的助手
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.5,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.3(当前的稳定版本)。
对话框的助手
谨慎
对话框的助手在Symfony弃用2.5和3.0在Symfony将被删除。ob娱乐下载现在,您应该使用问题的助手相反,这是更简单的使用。
的DialogHelper提供功能要求用户的更多信息。它包含在默认辅助设置,您可以通过调用getHelperSet ():
1
美元对话框=美元这- >getHelper (“对话框”);
对话框内的所有方法辅助有OutputInterface作为第一个参数,问题作为第二个参数,作为最后一个参数的默认值。
要求用户确认
假设你想确认操作之前执行它。添加以下命令:
1 2 3 4 5 6 7 8
/ /……如果(!美元对话框- >askConfirmation (美元输出,' <问题>继续这个行动? > < /问题的,假)){返回;}
在这种情况下,用户将被要求“继续这个行动?”,将返回真正的
如果用户的答案y
或假
如果用户的答案n
。第三个参数askConfirmation ()是返回的默认值如果用户不输入任何输入。其他输入又会问同样的问题。
要求用户信息
你也可以问问题超过一个简单的是或否的答案。例如,如果你想知道一个包的名字,你可以将它添加到你的命令:
1 2 3 4 5 6
/ /……美元包=美元对话框- >问(美元输出,“请输入包名称”,“AcmeDemoBundle”);
用户将被要求“请输入包名称”。他们可以将返回的输入一些名字问()方法。如果他们把它空,则返回默认值(AcmeDemoBundle这里)。
自动完成
您还可以指定数组的潜在回答了对于一个给定的问题。这些将自动完成用户类型:
1 2 3 4 5 6 7 8
美元对话框=美元这- >getHelper (“对话框”);美元bundleNames=数组(“AcmeDemoBundle”,“AcmeBlogBundle”,“AcmeStoreBundle”);美元的名字=美元对话框- >问(美元输出,“请输入一个包的名字”,“FooBundle”,美元bundleNames);
隐藏用户的响应
你也可以问一个问题和隐藏的响应。这是特别方便的密码:
1 2 3 4 5 6
美元对话框=美元这- >getHelper (“对话框”);美元密码=美元对话框- >askHiddenResponse (美元输出,“什么是数据库密码?”,假);
谨慎
当你问一个隐藏的回应,Symfony会使用二进制,改变stty模式或使用ob娱乐下载另一个隐藏的响应。如果没有,它将回退和允许的响应是可见的,除非你通过假
在上面的示例作为第三个参数。在这种情况下,会抛出一个RuntimeException。
验证答案
你甚至可以验证答案。例如,在最后一个例子你要包名称。Symfony的命名约定后,ob娱乐下载应该后缀为包
。你可以验证通过askAndValidate ()方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ /……美元包=美元对话框- >askAndValidate (美元输出,“请输入包名称”,函数(美元回答){如果(“包”! = = substr (美元回答,6)){扔新\ RuntimeException (的包的名称应该后缀为\ '包\”);}返回美元回答;},假,“AcmeDemoBundle”);
这个方法有两个新参数,完整的签名是:
1 2 3 4 5 6 7 8
askAndValidate (OutputInterface美元输出、字符串|数组美元问题,回调美元验证器、整数美元尝试=假、字符串美元默认的=零,数组美元自动完成=零)
的美元的验证器
是一个回调处理验证。它应该抛出一个异常是否有错了。异常消息显示在控制台中,所以这是一个很好的实践,把一些有用的信息。回调函数也应该返回用户输入的值如果验证成功。
你可以设置的最大次数要求美元的尝试
论点。如果你达到这个最大数量它将使用默认值。使用假
意味着尝试的数量是无限的。用户将被要求,只要他们提供了一个无效的答案,只能继续如果他们的输入是有效的。
验证一个隐藏的响应
你也可以询问和验证一个隐藏的反应:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
美元对话框=美元这- >getHelper (“对话框”);美元验证器=函数(美元价值){如果(”= = =修剪(美元价值)){扔新\异常(密码不能是空的);}返回美元价值;};美元密码=美元对话框- >askHiddenResponseAndValidate (美元输出,“请输入密码”,美元验证器,20.,假);
如果你想让反应可见如果不能隐藏某些原因,通过真正的作为第五个参数。
让用户从列表中选择的答案
如果你有一组预定义的回答用户可以选择,你可以使用问
上面描述的方法,以确保用户提供了一个正确的答案,askAndValidate
方法。都有缺点,你需要自己处理不正确的值。
相反,您可以使用select ()方法,确保用户只能输入一个有效的字符串从预定义列表:
1 2 3 4 5 6 7 8 9 10 11 12
美元对话框=美元这- >getHelper (“对话框”);美元颜色=数组(“红色”,“蓝”,“黄色”);美元颜色=美元对话框- >选择(美元输出,“请选择你最喜欢的颜色(默认为红色),美元颜色,0);美元输出- >writeln (你只有选择:。美元颜色(美元颜色]);/ /……做一些颜色吗
应该是默认选中的选项是第四个参数。默认值是零
,这意味着没有选项是默认的。
如果用户输入一个无效的字符串,显示一个错误消息和用户要求提供答案还有一次,直到他们输入有效的字符串或达到最大努力(您可以定义在第五论点)。默认值的尝试假
,这意味着无限的尝试。你可以定义自己的错误消息在第六的论点。
2.3
多选支持是在Symfony 2.3中引入的。ob娱乐下载
多个选择
有时候,可以将多个答案。使用逗号分隔值DialogHelper提供了这个功能。这是默认情况下禁用,使这组第七参数真正的
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ /……美元选择=美元对话框- >选择(美元输出,“请选择你最喜欢的颜色(默认为红色),美元颜色,0,假,“价值“% s”是无效的,真正的/ /支持多选);美元selectedColors=到函数(美元c)使用(美元颜色){返回美元颜色(美元c];},美元选择);美元输出- >writeln (你只有选择:。内爆(”、“,美元selectedColors));
现在,当用户输入1、2
结果将是:你刚刚选择:蓝色、黄色
。
测试预计输入的命令
如果你想编写一个单元测试的命令预计从命令行输入,需要覆盖HelperSet所使用的命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32
使用ob娱乐下载\组件\控制台\应用程序;使用ob娱乐下载\组件\控制台\助手\DialogHelper;使用ob娱乐下载\组件\控制台\助手\HelperSet;使用ob娱乐下载\组件\控制台\测试人员\CommandTester;/ /……公共函数testExecute(){/ /……美元应用程序=新应用程序();美元应用程序- >add (新MyCommand ());美元命令=美元应用程序- >找到(“我的命令:“);美元commandTester=新CommandTester (美元命令);美元对话框=美元命令- >getHelper (“对话框”);美元对话框- >setInputStream (美元这- >getInputStream (“测试\ n”));/ /等于用户输入“测试”和输入/ /如果你需要输入一个确认,“是的\ n”工作美元commandTester- >执行(数组(“命令”= >美元命令- >getName ()));/ / $ this - > assertRegExp (' /…/ ',$ commandTester - > getDisplay ());}受保护的函数getInputStream(美元输入){美元流= fopen (“php: / /记忆”,' r + ',假);fputs (美元流,美元输入);倒带(美元流);返回美元流;}
通过设置的输入流DialogHelper
,你模仿控制台内部与所有用户输入cli。这样你可以测试任何用户交互(即使是复杂的)通过一个适当的输入流。
另请参阅
你找到更多的信息关于测试命令控制台组件文档测试控制台命令。