2014-12-15 3 views
0

안녕하세요, Symfony에서 컨테이너 사용에 관해 간단한 질문이 있습니다.차이점 "ContainerAware 확장"및 "컨테이너 주입"

나를 위해, 컨테이너를 사용하는 두 가지 좋은 방법이 있습니다. 클래스 :

  1. 서비스로 클래스를 정의하고, "ContainerAware"클래스 확장 services.yml

  2. 컨테이너를 주입.

이 경우 가장 좋은 방법은 무엇입니까?

답변

1

실제로 많은 다른 것들에 달려 있습니다. 어떤 사람들은 컨테이너 주변을 지나가는 것은 실제로 나쁜 습관이라고 믿습니다. 컨테이너에서 컨테이너를 꺼내지 않고 필요한 서비스 만 전달하면됩니다.

컨테이너에서 전달하는 것과 관련하여 작업 한 프로젝트의 경우 일반적으로 서비스를 만들 때 클래스를 서비스로 정의하고 services.yml에 주입했으나 명령을 처리 할 때, dispatchers 등 우리는 "containerAwareCommand"또는 "containerAwareEventDispatcher"를 각각 확장합니다. 이것의 뒤에있는 추론은 그들이 서비스를 더 잘 제어하기를 원했지만 심포니와 관련된 명령 (예 : 명령)을 사용할 때 프레임 워크 방법론에 가입하는 것이 더 나을 것입니다.

+0

안녕 Derick,하지만 "이제는 어떤 사람들이 컨테이너를 지나치지 않고 ContainerAware 클래스를 확장하고 싶지 않다"고 말할 때 차이점은 무엇입니까? 왜냐하면 - 이해했던 것처럼 - ContainerAware 클래스는 심포니가 컨테이너를 주입하는 서비스이기도합니다 :? 나는 지금 약간 혼란 스럽다. 컨테이너가 ContainerAware 서비스에서 symfony에 의해 한 번만 주입되고 다른 서비스에서 사용되면 주입되지 않기 때문입니까? 컨테이너에 주사를하는 것보다 클래스에 다른 서비스가 없다면 ContainerAware를 확장하는 것이 더 나은가? 나는 ContainerAwareCommand를 사용한 적이 없다. –

+0

@ nova.cp 어떤 사람들은 컨테이너를 지나치지 않고 싶다고 말하는 것은 어떤 사람들은 반 패턴으로 생각한다는 것입니다. 이를 서비스 패턴 방지 패턴이라고합니다. 기본적으로, 그들은 모든 클래스에 컨테이너를 가지고있는 것에 반대합니다. –

+0

@ nova.cp ContainerAware 추상 클래스에 대한 나의 이해는 컨테이너를 설정하는 services.yml에서 호출 인수가 필요하다는 것입니다 (http://stackoverflow.com/questions/17126277/how-to-give -container-as-argument-to-services). ContainerAwareCommand와 같은 클래스에는 실제로 컨테이너를 가져 오는 getContainer 메소드가 있으므로 사용자가 설정하지 않아도됩니다. –

관련 문제