2017-05-18 6 views
2

필자는 지금까지 Symfony 종속성 주입 구성 요소를 사용하는 명령 줄 응용 프로그램을 보유하고 있습니다. 이제 명령 줄 옵션을 추가하고 출력 형식을 향상 시키려고합니다. Symfony 콘솔 구성 요소가 좋은 선택 인 것 같습니다.Symfony 프레임 워크 번들없이 Symfony 콘솔을 의존성 주입과 함께 사용하려면 어떻게해야합니까?

그러나 Symfony 콘솔 명령 클래스에서 컨테이너 객체를 수신하는 방법을 알 수 없습니다.

찾은 설명서는 ContainerAwareCommand 클래스를 사용하지만 FrameworkBundle에서 가져온 문서입니다. 순수 CLI 응용 프로그램에 추가하는 데 막대한 오버 헤드가 필요합니다. 라우팅, http, config, 캐시 등, 아무도 나에게 어떤 관련성도 전혀 없습니다.

나는 문제 설명하는 기본 명령으로 테스트 저장소 여기했습니다 (SO 또한 FrameworkBundle이 BTW, 가정 How can i inject dependencies to Symfony Console commands? 질문 기존.) : https://github.com/joachim-n/console-with-di

+0

링크의 2 차 답변은 어떻게됩니까? – COil

답변

1

예를, 전체 프레임 워크 ISN ' 필요하지 않습니다. 귀하의 경우에는 먼저 일종의 입력 스크립트를 만들어야합니다. 뭐 그런 :

<?php 

require 'just/set/your/own/path/to/vendor/autoload.php'; 

use Symfony\Component\Console\Application; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 

$container = new ContainerBuilder(); 
$container 
    ->register('your_console_command', 'Acme\Command\YourConsoleCommand') 
    ->addMethodCall('setContainer', [new Reference('service_container')]); 
$container->compile(); 

$application = new Application(); 
$application->add($container->get('your_console_command')); 
$application->run(); 

이 예에서, 우리는 컨테이너를 만든 다음 명령에 종속 (우리의 경우 전체 컨테이너를 추가 서비스로 명령을 등록 -하지만 분명히 다른 의존성을 만들 수 있습니다 주입하고) 컨테이너를 컴파일하십시오. 그런 다음 app을 만들고 app에 명령 인스턴스를 추가 한 다음 실행합니다.

물론 컨테이너의 모든 구성을 yaml 또는 xml으로 유지하거나 PHP 형식을 사용할 수도 있습니다.