如何将命令定义为服务

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.4,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何将命令定义为服务

如果你在用默认的服务。yaml的配置,您的命令类已经注册为服务。太棒了!这是推荐的设置。

请注意

还可以通过配置服务和手动将命令注册为服务标记它console.command

例如,假设你想在你的命令中记录一些东西:

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
名称空间应用程序命令使用Psr日志LoggerInterface使用ob娱乐下载组件控制台命令命令使用ob娱乐下载组件控制台输入InputInterface使用ob娱乐下载组件控制台输出OutputInterfaceSunshineCommand扩展命令受保护的静态defaultName“应用程序:阳光”私人日志记录器公共函数__construct(LoggerInterface日志记录器->记录器=日志记录器//你必须调用父构造函数::__construct ();}受保护的函数配置()无效->setDescription (“早上好!”);}受保护的函数执行(InputInterface输入, OutputInterface输出int->日志记录器->信息(“唤醒太阳”);/ /……返回0;}}

如果你在用默认的服务。yaml的配置时,命令类将自动注册为服务并传递美元记录器参数(感谢autowiring)。换句话说,您只需要创建这个类,一切都会自动工作!你可以致电应用:阳光命令并开始记录日志。

谨慎

有没有获得服务的机会配置().但是,如果您的命令不是懒惰的,尽量避免做任何工作(例如进行数据库查询),因为代码将运行,即使您使用控制台执行不同的命令。

请注意

在以前的Symfony版ob娱乐下载本中,您可以使命令类从扩展ContainerAwareCommand通过$ this - > getContainer() - >(“SERVICE_ID”).这在Symfony 4.2中已弃用,并且在未ob娱乐下载来的Symfony版本中也不能使用。

延迟加载

要使您的命令延迟加载,要么定义它defaultName美元静态属性:

1 2 3 4 5 6
SunshineCommand扩展命令受保护的静态defaultName“应用程序:阳光”/ /……

或设置命令属性上的console.command标签在你的服务定义中:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7
#配置/ services.yaml服务:#……App \命令\ SunshineCommand:标签:-名称:“console.command”命令:“应用程序:阳光”

请注意

如果命令定义别名(使用getAliases ()方法),则必须添加一个console.command每个别名标记。

就是这样。不管怎样,这个SunshineCommand将只在应用:阳光命令实际被调用。

请注意

你不需要打电话setName ()用于在延迟执行命令时配置该命令。

谨慎

调用列表Command将实例化所有命令,包括惰性命令。

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