如何定义命令服务
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 3.0,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
如何定义命令服务
默认情况下,Symfonob娱乐下载y会看一看命令
每个包的目录并自动注册您的命令。如果一个命令扩展了ContainerAwareCommand甚至ob娱乐下载,Symfony会注入容器。而使生活更容易,这有一些局限性:
- 你的命令必须住在
命令
目录; - 没有办法有条件注册您的服务基于环境或可用性的一些依赖关系;
- 你不能访问的容器
配置()
方法(因为setContainer
还没有叫); - 你不能使用相同的类来创建许多命令(即每个都有不同的配置)。
要解决这些问题,您可以注册你的命令作为服务和标记console.command
:
- YAML
- XML
- PHP
1 2 3 4 5 6
# app / config / config.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 45
/ / src / AppBundle /命令/ GreetCommand.php名称空间AppBundle\命令;使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputInterface;使用ob娱乐下载\组件\控制台\输入\InputOption;使用ob娱乐下载\组件\控制台\输出\OutputInterface;类GreetCommand扩展命令{受保护的美元defaultName;公共函数__construct(美元defaultName){美元这- >defaultName =美元defaultName;父::__construct ();}受保护的函数配置(){/ /尽量避免在这里工作(如数据库查询)/ /调用这个方法总是* *,见下面的警告美元defaultName=美元这- >defaultName;美元这- >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许可证。