如何从控制器调用命令
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 3.4,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
如何从控制器调用命令
的控制台组件文档欧宝官网下载app介绍如何创建控制台命令。本文介绍了如何从控制器直接使用控制台命令。
您可能需要执行一些仅在控制台命令中可用的功能。通常,您应该重构命令并将一些逻辑移动到可以在控制器中重用的服务中。但是,当该命令是第三方库的一部分时,您不希望修改或复制它们的代码。您可以直接执行该命令。
谨慎
与从控制台直接调用相比,由于请求堆栈开销,从控制器调用命令会有轻微的性能影响。
想象一下,你想发送假脱机的Swift Mailer消息使用swiftmailer:spool:send命令.从你的控制器内部运行这个命令:
12 34 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
/ / src / AppBundle /控制器/ SpoolController.php名称空间AppBundle\控制器;使用ob娱乐下载\包\FrameworkBundle\控制台\应用程序;使用ob娱乐下载\包\FrameworkBundle\控制器\控制器;使用ob娱乐下载\组件\控制台\输入\ArrayInput;使用ob娱乐下载\组件\控制台\输出\BufferedOutput;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\HttpKernel\KernelInterface;类SpoolController扩展控制器{公共函数sendSpoolAction($消息=10, KernelInterface$内核){$应用程序=新应用程序($内核);$应用程序->setAutoExit (假);$输入=新ArrayInput ([“命令”= >“swiftmailer:线轴:发送”,//(可选)定义命令参数的值“fooArgument”= >“barValue”,//(可选)将选项传递给命令“——message-limit”= >$消息]);//你可以使用NullOutput()如果你不需要输出$输出=新BufferedOutput ();$应用程序->运行($输入,$输出);//返回输出,如果你使用NullOutput()$内容=$输出->fetch ();//返回新的响应(""),如果你使用NullOutput()返回新响应($内容);}}
显示彩色命令输出
通过告诉BufferedOutput
它通过第二个参数进行装饰,它将返回Ansi颜色编码的内容。的SensioLabs anitohtml转换器可以用来将其转换为彩色HTML。
首先,要求包:
1
$编写器需要sensiolabs/ansi-to-html
现在,在你的控制器中使用它:
12 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
/ / src / AppBundle /控制器/ SpoolController.php名称空间AppBundle\控制器;使用SensioLabs\AnsiConverter\AnsiToHtmlConverter;使用ob娱乐下载\组件\控制台\输出\BufferedOutput;使用ob娱乐下载\组件\控制台\输出\OutputInterface;使用ob娱乐下载\组件\HttpFoundation\响应;/ /……类SpoolController扩展控制器{公共函数sendSpoolAction($消息=10){/ /……$输出=新BufferedOutput (OutputInterface::VERBOSITY_NORMAL,真正的//修饰为true);/ /……//返回输出$转换器=新AnsiToHtmlConverter ();$内容=$输出->fetch ();返回新响应($转换器->转换($内容));}}
的AnsiToHtmlConverter
也可以注册作为树枝扩展,并支持可选主题。
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。