엔티티 리포지토리가 필요한 양식 이벤트 가입자가 있습니다. 이 구독자가 여러 가지 형태로 필요하기 때문에이 저장소 종속성을 구독자 및 그 부모의 생성자를 사용하지 않고 이상적으로 주입하고 싶습니다.symfony2 의존성 최적화 삽입
그래서 기본적으로 나는 다음과 같은 체인이 있습니다
컨트롤러 호출을 -> CustomManagerService instantiates-> 양식이 인스턴스화 -> EventSubscriber needs-> EntityRepository
maanager 이미 서비스입니다. 관리자를 통해 양식을 통해 생성자 저장소 인수를 가입자에게 전송하는 것은 모두 고통이며 각 양식을 서비스로 설정하는 것은 어려움이 있습니다.
구독자의 저장소를 직접 인스턴스화 할 수없는 이유는 무엇입니까? 나는 그것이 나쁜 습관이라고 읽었다.
편집 :
$unitRepository = $this->getDoctrine()->getRepository('UnitRepository');
$myManager = $this->get('my_manager')
$form = $myManager->createForm($unitRepository);
myManager에서 : 내 양식에
public function createForm(UnitRepository $unitRepository){
return $this->formFactory->createForm(
new xxxType($unitRepository)
}
:
use MyBundle/AddUnitFieldSubscriber;
protected $unitRepository;
public function __construct(UnitRepository $unitRepository)
{
$this->unitRepository = $unitRepository;
}
public function buildform()
{
$builder->addEventSubscriber(new AddUnitFieldSubscriber($this->unitRepository));
}
내 컨트롤러에서
: 이것은 내가 지금까지 무엇을 가지고 내 구독자 : 보호 된 $ unitRepository;
public function __construct(UnitRepository $unitRepository)
{
$this->unitRepository = $unitRepository;
}
public function preSetData(FormEvent $event)
{
$unitRepository = $this->unitRepository;
$unitRepository->doStuff()
}
매우 가벼우 며 때로는 eventSubscriber를 사용하는 하위 양식을 호출하는 양식이 있습니다. 양식을 서비스로 설정하면 필요한 첫 번째 구성 매개 변수없이 인스턴스를 생성하기 때문에 오류가 발생하기도합니다.
구독자 만 저장소에 액세스해야한다는 것을 알기에 가장 짧은 경로는 무엇이며이를 반복하지 않을까요?
고맙습니다.
서비스 정의를 표시 할 수 있습니까? – tomazahlin
저장소를 인스턴스화하려면 엔티티 관리자에 대한 액세스 권한이 필요합니다 (저는 Doctrine 2를 사용하고 있다고 가정합니다). 따라서 구독자에서 저장소를 직접 인스턴스화하면 도움이되지 않습니다. 양식에 추가 서비스가 필요하면 양식을 서비스로 만듭니다. 몇 번 해보신 후에는 쉽습니다. 가입자를 서비스로 만들어 양식에 삽입 할 수도 있습니다. – Cerad
@Cerad, 양식을 서비스로 만들어야합니까? 인수없이 새로운 xxxType()과 같은 관리자의 양식을 계속 인스턴스화하면 오류가 발생한다는 느낌이 들지 않습니까? –