请在第一次配置
中帮助我使用配置控制台应用程序 #!/usr/bin/env php
<?php
use ....
...
$container = new ContainerBuilder();
$config = new YamlFileLoader($container, new FileLocator(__DIR__));
$config->load('config.yml');
$output = $container->get('symfony.console_output');$logger = $container->get('logger');
//I want automatic injection!!!!
$helloCommand = new HelloCommand($container, $logger);
$application = $container->get('symfony.application');
$application->add($helloCommand);
$application->run(null, $output);
我的config.yml
services:
logger:
class: Symfony\Component\Console\Logger\ConsoleLogger
arguments:
- '@symfony.console_output'
symfony.application:
class: Symfony\Component\Console\Application
calls:
//by this variant autowire not working
- [add, [ '@app.command.hello_command' ]]
- [setDispatcher, ['@symfony.event_dispatcher']]
...
app.command.hello_command:
class: App\Command\HelloCommand
autowire: true
tags:
- { name: console.command }
所以我的HelloCommand具有ContainerInterface和LoggerInterface的构造函数,只有当我直接设置这个参数时才有效,其他我有关于错误构造函数的错误
或者可能存在使用config.yml进行配置的另一种方式 对于只有记录器 - 它将通过set ['@logger']作为参数来简化,但是如何将当前容器设置为参数? 或者我将不得不使用httpkernel安装完整的symfony(但它不需要)
HelloCommand http://pastebin.com/VRr3FM7Q
决定
app.command.hello_command:
class: App\Command\HelloCommand
arguments:
- '@service_container'
- '@logger'
tags:
- { name: console.command }
答案 0 :(得分:2)
问题在于如何配置命令:
ANY
这会错过所需的2个构造函数参数:app.command.hello_command:
class: App\Command\HelloCommand
autowire: true
tags:
- { name: console.command }
,$container
,这可能是您获得异常的原因。您可以添加如下构造函数参数:
$logger
我不确定service_container的id是否正确。我从不传递容器或制作ContainerAware,但你得到了一般的想法。 ;)