如何定义命令服务

编辑该页面

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

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何定义命令服务

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

请注意

你也可以手动注册您的命令通过配置服务和服务标记它console.command

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

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

如果你使用默认的服务。yaml的配置,命令类将自动注册为一个服务,并通过了美元记录器参数(由于自动装配)。换句话说,只是通过创建这个类,一切正常!你可以叫的应用:阳光命令,启动日志记录。

谨慎

访问服务吗配置()。但是,如果您的命令懒惰的,尽量避免做任何工作(如进行数据库查询),代码将运行,即使你使用控制台执行不同的命令。

请注意

在以前的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
#配置/ services.yaml服务:App \命令\ SunshineCommand:标签:- - - - - -{名称:“console.command”,命令:“应用程序:阳光”}#……

请注意

如果命令定义别名(使用getAliases ()你必须添加一个方法)console.command标签/别名。

就是这样。这样或那样的方式,SunshineCommand只有当实例化应用:阳光命令实际上是调用。

请注意

你不需要打电话setName ()配置命令时懒惰。

谨慎

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

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