控制台命令
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.0,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
控制台命令
Symfob娱乐下载ony框架提供了通过大量的命令bin /控制台
脚本(如著名的bin /控制台缓存:清楚
命令)。这些命令创建控制台组件。您还可以使用它来创建你自己的命令。
控制台:APP_ENV & APP_DEBUG
控制台命令的运行环境中定义的APP_ENV
变量的.env
文件,这是dev
默认情况下。它还读取APP_DEBUG
打开或关闭“调试”模式的价值(它默认1
,)。
在另一个环境中运行该命令或调试模式,编辑的价值APP_ENV
和APP_DEBUG
。
创建一个命令
命令扩展中定义的类命令。例如,您可能想要一个命令来创建一个用户:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24
/ / src /命令/ CreateUserCommand.php名称空间应用程序\命令;使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputInterface;使用ob娱乐下载\组件\控制台\输出\OutputInterface;类CreateUserCommand扩展命令{/ /命令的名称(“bin /控制台”后的部分)受保护的静态美元defaultName=“应用程序:创建用户”;受保护的函数配置(){/ /……}受保护的函数执行(InputInterface美元输入,OutputInterface美元输出){/ /……返回0;}}
配置命令
您可以定义一个描述、消息和帮助输入选项和参数:
1 2 3 4 5 6 7 8 9 10 11 12
/ /……受保护的函数配置(){美元这/ /显示的简短描述在运行“php bin /控制台名单”- >setDescription (创建一个新用户。)/ /运行命令时显示的完整命令的描述/ /”——帮助”选项- >setHelp (“这个命令允许您创建一个用户……”);}
的配置()
方法被调用结束时自动命令构造函数。如果你的命令定义自己的构造函数,设置属性,然后调用父构造函数,使这些属性中可用配置()
方法:
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日
/ /……使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputArgument;类CreateUserCommand扩展命令{/ /……公共函数__construct(保龄球美元requirePassword= false){/ /最佳实践建议先构造函数调用父/ /设置你自己的属性。在这种情况下,不工作/ /因为配置()需要这个构造函数的属性设置美元这- >requirePassword =美元requirePassword;父::__construct ();}受保护的函数配置(){美元这/ /……- >addArgument (“密码”,美元这- >requirePassword吗?InputArgument::要求:InputArgument::可选的,“用户密码”);}}
注册命令
ob娱乐下载必须注册为服务和Symfony命令标记与console.command
标签。如果你使用默认的服务。yaml的配置,这已经为你做好了,谢谢自动配置。
控制台输出
的execute ()
方法获得输出流写入消息到控制台:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
/ /……受保护的函数执行(InputInterface美元输入,OutputInterface美元输出){/ /多行输出到控制台(添加“\ n”结束时,每一行)美元输出- >writeln ([“用户的创造者”,' = = = = = = = = = = = = ',”]);/ /返回的值someMethod()可以是一个迭代器(https://secure.php.net/iterator)/ /生成并返回的消息“产量”PHP关键字美元输出- >writeln (美元这- >someMethod ());/ /输出消息紧随其后的是“\ n”美元输出- >writeln (“哇!”);/ /输出一条消息没有添加一个“\ n”的路线美元输出- >写(你要的);美元输出- >写(创建一个用户。);返回0;}
现在,尝试执行命令:
1 2 3 4 5 6
美元php bin /控制台应用程序:创建用户用户创造者= = = = = = = = = = = =哇!你要创建一个用户。
输出部分
常规的控制台输出可分为多个独立区域称为“产出部分”。创建一个或更多的这些部分当你需要清晰和覆盖信息的输出。
部分是与创建的(节)方法,该方法返回的一个实例ConsoleSectionOutput:
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日
类MyCommand扩展命令{受保护的函数执行(InputInterface美元输入,OutputInterface美元输出){美元section1=美元输出- >节();美元section2=美元输出- >节();美元section1- >writeln (“你好”);美元section2- >writeln (“世界!”);/ /输出显示“Hello \ nWorld ! \ n”/ /覆盖()替代所有现有的部分内容与给定的内容美元section1- >覆盖(“再见”);/ /输出现在显示“再见\ nWorld ! \ n”/ / clear()删除所有的部分内容……美元section2- >明确的();/ /输出现在显示“再见\ n”/ /……但是你也可以删除一个给定的行数/ /(本例中删除部分)的最后两行美元section1- >清楚(2);/ /输出现在完全是空的!返回0;}}
请注意
一个新行是附加在一段时自动显示信息。
控制台输入
使用输入选项或参数来传递信息的命令:
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日
使用ob娱乐下载\组件\控制台\输入\InputArgument;/ /……受保护的函数配置(){美元这/ /配置一个论点- >addArgument (“用户名”,InputArgument::必需的,用户的用户名。)/ /……;}/ /……公共函数执行(InputInterface美元输入,OutputInterface美元输出){美元输出- >writeln ([“用户的创造者”,' = = = = = = = = = = = = ',”]);/ /获取参数值使用getArgument ()美元输出- >writeln (的用户名:。美元输入- >getArgument (“用户名”));返回0;}
现在,您可以通过命令的用户名:
1 2 3 4 5
美元php bin /控制台应用程序:创建用户Wouter用户创造者= = = = = = = = = = = =用户名:Wouter
另请参阅
读控制台输入(参数和选项)更多信息关于控制台选项和参数。
服务从服务容器
创建一个新的用户,命令访问一些服务。因为你的命令已经注册为一个服务,您可以使用正常的依赖注入。想象你有一个应用\ \ UserManager服务
服务,你想访问:
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
/ /……使用应用程序\服务\UserManager;使用ob娱乐下载\组件\控制台\命令\命令;类CreateUserCommand扩展命令{私人美元userManager;公共函数__construct(UserManager美元userManager){美元这- >userManager =美元userManager;父::__construct ();}/ /……受保护的函数执行(InputInterface美元输入,OutputInterface美元输出){/ /……美元这- >userManager- >创建(美元输入- >getArgument (“用户名”));美元输出- >writeln (“用户生成成功!”);返回0;}}
命令的生命周期
命令有三个生命周期方法调用在运行命令:
- 初始化() (可选)
-
这个方法之前执行
(交互)
和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
/ /测试/命令/ CreateUserCommandTest.php名称空间应用程序\测试\命令;使用ob娱乐下载\包\FrameworkBundle\控制台\应用程序;使用ob娱乐下载\包\FrameworkBundle\测试\KernelTestCase;使用ob娱乐下载\组件\控制台\测试人员\CommandTester;类CreateUserCommandTest扩展KernelTestCase{公共函数testExecute(){美元内核=静态::createKernel ();美元应用程序=新应用程序(美元内核);美元命令=美元应用程序- >找到(“应用程序:创建用户”);美元commandTester=新CommandTester (美元命令);美元commandTester- >执行([/ /传递参数的帮手“用户名”= >“Wouter”,/ /前缀的关键有两个破折号传递选项时,/ / e。旅客:“——一些期权”= >“option_value”,]);/ /控制台的命令的输出美元输出=美元commandTester- >getDisplay ();美元这- >assertStringContainsString (“用户名:Wouter”,美元输出);/ /……}}
提示
你也可以测试一个控制台应用程序通过使用ApplicationTester。
谨慎
在测试使用的命令CommandTester
类,控制台事件不是派遣。如果你需要测试这些事件,使用ApplicationTester代替。
请注意
当使用控制台组件在一个独立的项目中,使用ob娱乐下载Symfony \ \ \ \ \ \控制台应用程序的组件和扩展的正常框架\ PHPUnit) \ \ TestCase
。
记录命令错误
只要在运行命令时抛出异常,Symfony为它添加了一个日志消息包括整个命令失败。ob娱乐下载此外,Symfony注册一ob娱乐下载个事件订阅者听ConsoleEvents:终止事件并添加一个日志消息命令时没有完成的0
退出状态。