2012-03-02 2 views

답변

3

많은 장단점이 있으며 모두 장단점이 있습니다.

먼저 모든 서비스는 어떤 종류의 객체이기 때문에 항상 문제의 객체를 직접 만들 수 있습니다. 많은 참고 문헌을 다루어야 할 수도 있지만 가능합니다. 이것은 Dependency Injection의 아이디어를 약화시킵니다. 그래서 당신이해야하는 것이 아닙니다! 당신은 당신의 컨트롤러 내에서 클래스를 사용하는 경우

class MyClass{ 

    public function __construct($session){ 
     // ... 
    } 
} 

class MyContainer extends Controller{ 

    public function SomeKindOfAction(){ 
     $myClass = new MyClass($this->get('session')); 
    } 
} 

이 확인 될 수 있습니다

두 번째 방법은 클래스에 서비스를 주입입니다. MyClass와 같이 중첩 된 관계가 더 있으면 세션이 필요한 다른 클래스를 만들면 복잡한 문제는 물론 밀접한 결합으로 피할 수 있습니다.

가장 좋은 방법은 나만의 서비스를 만들고 거기에 필요한 것을 주입하는 것입니다. 거기에 많은 문서가 있으므로 위의 MyClass를 사용하여 간단한 예제를 제공 할 것입니다.

services.yml: 

services: 
    my.myClass: 
     class: /Acme/DefaultBundle/MyStuff/MyClass 
     arguments: ["@session"] 

는 이제 클래스 (!하면 해당 쉽게 추측 할 사람) 서비스로 그리고 당신은 당신의 컨트롤러 내에서 사용할 수 있습니다 : 이제

class MyContainer extends Controller{ 

    public function SomeKindOfAction(){ 
     $myClass = $this->get('my.myClass'); 
    } 
} 

당신이 생성자와 방법에 대해 생각하지 않습니다 개체를 얻으려면 DI 컨테이너가 대신 해줍니다. 더 많은 것을 알고 싶다면 here을 읽으십시오.

+0

고맙습니다. – falinsky