如何从一个控制器调用命令
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.1,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
如何从一个控制器调用命令
的控制台组件文档欧宝官网下载app介绍了如何创建一个控制台命令。本文将介绍如何使用控制台命令直接从您的控制器。
你可能需要调用某些函数只能在一个控制台命令。通常,你应该重构命令和一些逻辑转移到一个服务,可以在控制器中重用。然而,当命令是一个第三方库的一部分,你不想修改或复制他们的代码。相反,您可以运行该命令直接从控制器。
谨慎
与直接从控制台调用相比,从一个控制器调用命令有一个轻微的性能影响,因为请求堆栈开销。
假设您希望发送spooled迅速梅勒使用swiftmailer:线轴:发送命令。运行这个命令从控制器中通过:
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
/ / src /控制器/ SpoolController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制台\应用程序;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\控制台\输入\ArrayInput;使用ob娱乐下载\组件\控制台\输出\BufferedOutput;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\HttpKernel\KernelInterface;类SpoolController扩展AbstractController{公共函数sendSpool(美元消息=10,KernelInterface美元内核){美元应用程序=新应用程序(美元内核);美元应用程序- >setAutoExit (假);美元输入=新ArrayInput ([“命令”= >“swiftmailer:线轴:发送”,/ /的值(可选)定义命令参数“fooArgument”= >“barValue”,/ /(可选)选项传递给命令“——message-limit”= >美元消息]);/ /可以使用NullOutput()如果你不需要输出美元输出=新BufferedOutput ();美元应用程序- >运行(美元输入,美元输出);/ /返回的输出,不要使用如果你使用NullOutput ()美元内容=美元输出- >fetch ();/ /返回新的反应(" "),如果使用NullOutput ()返回新响应(美元内容);}}
显示彩色的命令输出
通过告诉BufferedOutput
装饰通过第二个参数,它将返回Ansi彩色编码的内容。的SensioLabs AnsiToHtml转换器可以用来转换为彩色的HTML。
首先,需要包:
1
美元作曲家需要sensiolabs / ansi-to-html
现在,使用它在你的控制器:
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
/ / src /控制器/ SpoolController.php名称空间应用程序\控制器;使用SensioLabs\AnsiConverter\AnsiToHtmlConverter;使用ob娱乐下载\组件\控制台\输出\BufferedOutput;使用ob娱乐下载\组件\控制台\输出\OutputInterface;使用ob娱乐下载\组件\HttpFoundation\响应;/ /……类SpoolController扩展AbstractController{公共函数sendSpool(美元消息=10){/ /……美元输出=新BufferedOutput (OutputInterface::VERBOSITY_NORMAL,真正的/ /对装饰);/ /……/ /返回的输出美元转换器=新AnsiToHtmlConverter ();美元内容=美元输出- >fetch ();返回新响应(美元转换器- >转换(美元内容));}}
的AnsiToHtmlConverter
也可以注册作为一个树枝延伸,并支持可选的主题。
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。