如何从控制器调用命令

编辑本页

警告:您正在浏览的文档欧宝官网下载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娱乐下载组件HttpKernelKernelInterfaceSpoolController扩展控制器公共函数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控制器使用SensioLabsAnsiConverterAnsiToHtmlConverter使用ob娱乐下载组件控制台输出BufferedOutput使用ob娱乐下载组件控制台输出OutputInterface使用ob娱乐下载组件HttpFoundation响应/ /……SpoolController扩展控制器公共函数sendSpoolAction消息10/ /……输出BufferedOutput (OutputInterface::VERBOSITY_NORMAL,真正的//修饰为true);/ /……//返回输出转换器AnsiToHtmlConverter ();内容输出->fetch ();返回响应(转换器->转换(内容));}}

AnsiToHtmlConverter也可以注册作为树枝扩展,并支持可选主题。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。