2014-05-19 2 views
1

내 심포니 2 응용 프로그램에서 서비스로 ResultFactory 클래스를 사용하고 싶습니다 :심포니 공장 클래스

내 결과 팩토리 클래스는 BaseResult 인스턴스를 생성 할 책임이 있습니다. get factory 메소드에 전달 된 유형에 따라 ResultFactory는 올바른 ResultObject를 작성합니다.

class ResultFactory 
{ 

    protected $translator; 

    public function __construct(Translator $translator) 
    { 
     $this->translator = $translator; 
    } 

    public function get($type, $param) 
    { 
     $instance = null; 

     switch ($type) { 

      case 'Type1': 
       $instance = new Type1Result($param); 
       break; 

      case 'Type2': 
       $instance = new Type2Result($param); 
       break; 

     } 

     return $instance; 
    } 
} 

내 질문은 다음과 같습니다 : 내 ResultObject에서 서비스를 사용하고자하는

여기에 코드가 될 수있는거야. 이 서비스를 내 ResultObject에 어떻게 주입합니까?

감사합니다.

+0

반환하기 전에 결과 객체에 서비스를 주입하는 방법을 명확하게 설명해주십시오. setter- 또는 contructur-injection ...? '$ instance-> setService ($ service)'또는'새로운 인스턴스 ($ service, $ param)'? 당신이 이미 번역기 서비스를 주입하고있는 것처럼 당신이 원하는 것이 무엇인지 분명하지 않습니다 ... 당신이 주입하기를 원하는 서비스를 공장에 대한 추가적인 인수로 리턴 객체에 전달하고 통과시키는 것이 어떨까요? – nifr

+0

나는 서비스를 주입하기 위해 어떤 방법을 사용하고 싶은지 모른다. Result 클래스에 일부 서비스를 사용할 수 있기를 원합니다. 나는 그것이 올바른 방법 이었는지 확신 할 수 없었고, 그것을 인스턴스 생성자에 인수로 전달하여 그것을 기본 클래스에 저장했다. 감사! – user3544352

답변

1

결과 개체 내에서 서비스를 사용하고 있지 않습니다. 귀하의 공장에서 결과 개체를 생성하고 있습니다.

$resultObject = $this->get('result_factory')->get($type, $param); 

는 또한 공장 서비스를 만드는 방법 핵심 예제를 가지고 : 당신이 서비스를 호출 할 수 있습니다

result.factory: 
    class: ResultFactory 
    arguments: ["@translator"] 

그리고 당신의 컨트롤러 :로 당신은 당신의 번들의 services.yml에 공장 서비스를 정의 할 수 있습니다 [docs]에서 symfony2를 사용하십시오. (http://symfony.com/doc/current/components/dependency_injection/factories.html)