如何定义命令服务

编辑该页面

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

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

如何定义命令服务

默认情况下,Symfonob娱乐下载y会看一看命令每个包的目录并自动注册您的命令。如果一个命令扩展了ContainerAwareCommand甚至ob娱乐下载,Symfony会注入容器。而使生活更容易,这有一些局限性:

  • 你的命令必须住在命令目录;
  • 没有办法有条件注册您的命令基于环境或可用性的一些依赖关系;
  • 你不能访问的容器配置()方法(因为setContainer ()还没有叫);
  • 你不能使用相同的类来创建许多命令(即每个都有不同的配置)。

要解决这些问题,您可以注册你的命令作为服务和标记console.command:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6
# app / config / services.yml服务:app.command.my_command:类:AppBundle \ \ MyCommand命令标签:- - - - - -{名称:console.command}

使用依赖项和参数设置选项的默认值

想象你想提供一个默认值的名字选择。你可以通过以下的五参数之一使用addOption ():

  • 一个硬编码的字符串;
  • 一个容器参数(例如从parameters.yml);
  • 值计算的服务(例如,存储库)。

通过扩展ContainerAwareCommand,只有第一个是可能的,因为你不能访问内部的容器配置()方法。相反,注入任何参数或服务需要构造函数。例如,假设您在一些存储默认值% command.default_name %参数:

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 37 38 39 40 41 42 43 44
/ / src / AppBundle /命令/ GreetCommand.php名称空间AppBundle\命令;使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputInterface;使用ob娱乐下载\组件\控制台\输入\InputOption;使用ob娱乐下载\组件\控制台\输出\OutputInterface;GreetCommand扩展命令{受保护的美元defaultName;公共函数__construct(美元defaultName){美元- >defaultName =美元defaultName;::__construct ();}受保护的函数配置(){/ /尽量避免在这里工作(如数据库查询)/ /调用这个方法总是* *,见下面的警告美元- >setName (“演示:问候”)- >setDescription (“欢迎某人”)- >使用addOption (“名字”,“n”,InputOption::VALUE_REQUIRED,“你想问谁?”,美元- >defaultName);}受保护的函数执行(InputInterface美元输入,OutputInterface美元输出){美元的名字=美元输入- >getOption (“名字”);美元输出- >writeln (美元的名字);}}

现在,就更新你的服务配置的参数正常注入command.default_name参数:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10
# app / config / config.yml参数:command.default_name:哈维尔服务:app.command.my_command:类:AppBundle \ \ MyCommand命令参数:[" % command.default_name % "]标签:- - - - - -{名称:console.command}

好,你现在有一个动态的默认值!

谨慎

小心不要做任何工作配置(如数据库查询),当你的代码将运行,即使你使用控制台执行不同的命令。

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