如何从一个控制器调用命令

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。

这个页面的更新版本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(int美元消息=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(int美元消息=10):响应{/ /……美元输出=BufferedOutput (OutputInterface::VERBOSITY_NORMAL,真正的/ /对装饰);/ /……/ /返回的输出美元转换器=AnsiToHtmlConverter ();美元内容=美元输出- >fetch ();返回响应(美元转换器- >转换(美元内容));}}

AnsiToHtmlConverter也可以注册作为一个树枝延伸,并支持可选的主题。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。