如何使用autowire命令设置控制台应用程序?

时间:2016-08-18 01:39:39

标签: symfony

请在第一次配置

中帮助我使用配置控制台应用程序
 #!/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 }

1 个答案:

答案 0 :(得分:2)

问题在于如何配置命令:

ANY

这会错过所需的2个构造函数参数:app.command.hello_command: class: App\Command\HelloCommand autowire: true tags: - { name: console.command } $container,这可能是您获得异常的原因。您可以添加如下构造函数参数:

$logger

我不确定service_container的id是否正确。我从不传递容器或制作ContainerAware,但你得到了一般的想法。 ;)