控制台命令
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.8,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
控制台命令
Symfob娱乐下载ony框架提供了通过大量的命令app /控制台
脚本(如著名的应用程序/控制台缓存:清楚
命令)。这些命令创建控制台组件。您还可以使用它来创建你自己的命令。
创建一个命令
命令必须创建的类中定义命令
你的包名称空间(如。AppBundle \命令
)和他们的名字必须结束命令
后缀。
例如,一个命令CreateUser
必须遵循这个结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src / AppBundle /命令/ CreateUserCommand.php名称空间AppBundle\命令;使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputInterface;使用ob娱乐下载\组件\控制台\输出\OutputInterface;类CreateUserCommand扩展命令{受保护的函数配置(){/ /……}受保护的函数执行(InputInterface美元输入,OutputInterface美元输出){/ /……}}
配置命令
首先,您必须配置的命令的名称配置()
方法。然后你可以定义一个消息和帮助输入选项和参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ /……受保护的函数配置(){美元这/ /命令的名称(“app /控制台”后的部分)- >setName (“应用程序:创建用户”)/ /显示的简短描述在运行php应用程序/控制台列表”- >setDescription (创建一个新用户。)/ /运行命令时显示的完整命令的描述/ /”——帮助”选项- >setHelp (“这个命令允许您创建一个用户……”);}
注册命令
ob娱乐下载Symfony命令必须注册之前使用它们。为了自动注册,一个命令必须:
- 存储在一个目录
命令/
; - 一个类中定义的名字结尾
命令
; - 定义在一个类,它扩展了命令。
如果你不能满足这些条件,一个命令,另一种是手动命令注册为一个服务。
执行命令
配置和注册命令后,您可以执行它在终端:
1
美元php应用程序/控制台应用程序:创建用户
如您所料,这个命令将什么都不做你没有写任何逻辑。在添加自己的逻辑execute ()
方法,获取输入流(如选项和参数)和输出流(写消息到控制台):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ /……受保护的函数执行(InputInterface美元输入,OutputInterface美元输出){/ /多行输出到控制台(添加“\ n”结束时,每一行)美元输出- >writeln ([“用户的创造者”,' = = = = = = = = = = = = ',”]);/ /输出消息紧随其后的是“\ n”美元输出- >writeln (“哇!”);/ /输出一条消息没有添加一个“\ n”的路线美元输出- >写(你要的);美元输出- >写(创建一个用户。);}
现在,尝试执行命令:
1 2 3 4 5 6
美元php应用程序/控制台应用程序:创建用户用户创造者= = = = = = = = = = = =哇!你要创建一个用户。
控制台输入
使用输入选项或参数来传递信息的命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24
使用ob娱乐下载\组件\控制台\输入\InputArgument;/ /……受保护的函数配置(){美元这/ /配置一个论点- >addArgument (“用户名”,InputArgument::必需的,用户的用户名。)/ /……;}/ /……公共函数执行(InputInterface美元输入,OutputInterface美元输出){美元输出- >writeln ([“用户的创造者”,' = = = = = = = = = = = = ',”]);/ /获取参数值使用getArgument ()美元输出- >writeln (的用户名:。美元输入- >getArgument (“用户名”));}
现在,您可以通过命令的用户名:
1 2 3 4 5
美元php应用程序/控制台应用程序:创建用户Wouter用户创造者= = = = = = = = = = = =用户名:Wouter
另请参阅
读控制台输入(参数和选项)更多信息关于控制台选项和参数。
服务从服务容器
创建一个新的用户,命令访问一些服务。可以通过命令扩展ContainerAwareCommand而不是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ /……使用ob娱乐下载\包\FrameworkBundle\命令\ContainerAwareCommand;类CreateUserCommand扩展ContainerAwareCommand{/ /……受保护的函数执行(InputInterface美元输入,OutputInterface美元输出){/ /……/ /使用getContainer访问容器()美元userManager=美元这- >getContainer ()- >get (“app.user_manager”);美元userManager- >创建(美元输入- >getArgument (“用户名”));美元输出- >writeln (“用户生成成功!”);}}
现在,一旦您创建了所需的服务和逻辑,命令将执行create ()
的方法app.user_manager
服务和用户将被创建。
命令的生命周期
命令有三个生命周期方法调用在运行命令:
- 初始化() (可选)
-
这个方法之前执行
(交互)
和execute ()
方法。它的主要目的是使用初始化变量命令的其他方法。 - (交互) (可选)
-
该方法后执行
初始化()
之前,execute ()
。其目的是检查的一些选项/参数是否失踪,交互式地问用户输入这些值。这是最后的地方你可以询问丢失的选项和参数。这个命令后,失踪的选项/参数会导致一个错误。 - execute () (必需)
-
该方法后执行
(交互)
和初始化()
。它包含了你想要的逻辑执行的命令。
测试命令
ob娱乐下载Symfony提供了一些工具来帮助你测试你的命令。最有用的一个是CommandTester类。它使用特殊的输入和输出类来缓解测试没有真正的控制台:
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 33 34 35 36
/ /测试/ AppBundle /命令/ CreateUserCommandTest.php名称空间测试\AppBundle\命令;使用AppBundle\命令\CreateUserCommand;使用ob娱乐下载\包\FrameworkBundle\控制台\应用程序;使用ob娱乐下载\包\FrameworkBundle\测试\KernelTestCase;使用ob娱乐下载\组件\控制台\测试人员\CommandTester;类CreateUserCommandTest扩展KernelTestCase{公共函数testExecute(){自我::bootKernel ();美元应用程序=新应用程序(自我::$内核);美元应用程序- >add (新CreateUserCommand ());美元命令=美元应用程序- >找到(“应用程序:创建用户”);美元commandTester=新CommandTester (美元命令);美元commandTester- >执行(数组(“命令”= >美元命令- >getName (),/ /传递参数的帮手“用户名”= >“Wouter”,/ /前缀的关键有两个破折号传递选项时,/ / e。旅客:“——一些期权”= >“option_value”,));/ /控制台的命令的输出美元输出=美元commandTester- >getDisplay ();美元这- >assertContains (“用户名:Wouter”,美元输出);/ /……}}
提示
你也可以测试一个控制台应用程序通过使用ApplicationTester。
请注意
当使用控制台组件在一个独立的项目中,使用ob娱乐下载Symfony \ \ \ \ \ \控制台应用程序的组件和扩展的正常框架\ PHPUnit) \ \ TestCase
。
能够使用完全为您的控制台设置服务容器测试可以扩展您的测试KernelTestCase:
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
/ /……使用ob娱乐下载\组件\控制台\测试人员\CommandTester;使用ob娱乐下载\包\FrameworkBundle\控制台\应用程序;使用ob娱乐下载\包\FrameworkBundle\测试\KernelTestCase;类CreateUserCommandTest扩展KernelTestCase{公共函数testExecute(){美元内核=静态::createKernel ();美元内核- >引导();美元应用程序=新应用程序(美元内核);美元应用程序- >add (新CreateUserCommand ());美元命令=美元应用程序- >找到(“应用程序:创建用户”);美元commandTester=新CommandTester (美元命令);美元commandTester- >执行(数组(“命令”= >美元命令- >getName (),“用户名”= >“Wouter”));美元输出=美元commandTester- >getDisplay ();美元这- >assertContains (“用户名:Wouter”,美元输出);/ /……}}