2012-04-23 2 views
2

Symfony2에서 서비스 컨테이너를 만들 때 대부분 다른 클래스와 같은 "정적"인수를 생성자에 전달합니다.Symony2 컨테이너 생성자에 인수를 전달할 수 있습니까?

그러나 공장을 만들고 싶습니다. 따라서 서비스 생성자에 동적 인수를 전달할 수 있어야합니다.

예 (예 : http://symfony.com/doc/current/cookbook/service_container/factories.html)는 모두 정적 인수를 인수로 사용하여 끝납니다.

내 공장에서 (예를 들어) 사용자 입력에 따라 반환 할 객체를 결정하도록하려면 어떻게해야합니까?

답변

3

서비스 팩토리가 귀하의 케이스에서 작동하지 않아야하는 이유를 이해하는 데 몇 가지 문제점이 있습니다. 서로 다른 서비스 클래스를 반환해야합니까? 이 사용자의 요구에 맞지 않으면, 지금

class NewsletterFactory 
{ 
    public function __constructor(...) 
    { 
     // Receive arguments needed to create the service below 
    } 

    public function get() 
    { 
     // Say the variable $userInput exists and is derived from constructor 
     if ($userInput === 'string') 
      return new NewsletterManager($dynamicArgument1); 

     if ($userInput === 'integer') 
      return new AnotherNewsletterManager($dynamicArgument2); 

     return new DefaultNewsletterManager(); 
    } 
} 

: 나는 공장의 예에서 볼 무엇

는이 같은 뭔가를 할 수 있다는 것입니다. 필요한 것을 반환하는 CustomFactory이라는 서비스를 만들 수도 있습니다. 반환되는 것은 직접 서비스가 아니므로 원하는대로 할 수 있습니다. 하지만 이렇게하면 CustomFactory에 의해 생성 된 개체를 종속성 컨테이너에서 요청할 수 없습니다.

FormFactory과 유사합니다. 양식 유형을 인스턴스화하는 데 사용되는 팩토리입니다. 그러나 FormFactory은 의존성 삽입 태그와 컴파일러 패스가 결합되어 있기 때문에 더 강력합니다. 각 유형은 종속성 주입 시스템에 각 유형을 등록하여 독자적으로 검색 할 수 있습니다. 나는 정확히 Form 구성 요소의 모든 내부 구조는 아니지만 다른 방법으로는 문제가 해결 될 수 있다고 생각합니다.

감사합니다.
매트

관련 문제