最初に、設定コンソールアプリケーションで私を助けてください - コンフィグautowireコマンドでコンソールアプリケーションを設定する方法は?
#!/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を使用したコンフィグレーションの別の方法が存在する可能性があります。 はロガーのみです。セット['@logger' ]を引数として使用しますが、現在のコンテナを引数としてどのように設定できますか? それともhttpkernelでいっぱいにsymfonyをインストールする必要がありi`ll(それは必要ありません)
HelloCommand http://pastebin.com/VRr3FM7Q
DECISION
app.command.hello_command:
class: App\Command\HelloCommand
arguments:
- '@service_container'
- '@logger'
tags:
- { name: console.command }
サービスとして登録しようとすると、なぜあなたは手動で 'HelloCommand'のオブジェクトを作成しますか? 'HelloCommand'クラスのコードも表示してください。 – xabbuh
代替バリアント。もし私が初期化を使って手動で作成しても構いませんが、設定注入がうまくいかない場合は、 – Lenny
HelloCommand http://pastebin.com/VRr3FM7Q – Lenny