2013-04-12 5 views
5

도움이 필요하십니까? 드롭 다운 목록이있는 양식이 있으며 외부 입력을 기반으로 선택 사항을 수정해야합니다. 나는의 EventListenersymfony2 - eventListener로 양식 필드 수정

$builder->addEventListener(
      FormEvents::PRE_SET_DATA, 
      function(FormEvent $event) use($input){ 
       $form = $event->getForm(); 

       // get existin form child 
       // modify list of choices 

      } 

난 단지 새로운 필드를 추가 FormEvents을 사용하는 본 모든 샘플이 잘 작동합니다 생각,하지만 난 필드를 기존 수정해야하지만 난 그것을 액세스하는 방법을 모르겠어요. 도움을

감사

엔티티 관계를 전체 동적 양식을 통해 작동 여기에 블로그 게시물이
+0

jros : 어떤 방식으로 수정하려고합니까? 다른 유형으로 바꾸시겠습니까, 아니면 속성 중 하나만 변경 하시겠습니까, 아니면 다른 것을 변경 하시겠습니까? – Sean

답변

2

수행 할 수있는 작업은 원래 자식을 재정의하는 것입니다.

$builder->addEventListener(
     FormEvents::PRE_SET_DATA, 
     function(FormEvent $event) use($input){ 
      $form = $event->getForm(); 

      $form->add($this->factory->createNamed('name_to_override', 'choice', null, 
       array("choices" => array("choice"=>"value")) 
       )); 

     } 

그것은 나를 위해 일했습니다.

참고 : 참고 :클로저는 PHP 5.3에서 사용할 수 없으므로이 기능은 PHP 5.4에서만 작동합니다.

<?php 

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { 
    $form = $event->getForm(); 

    // Get configuration & options of specific field 
    $config = $form->get('field_to_update')->getConfig(); 
    $options = $config->getOptions(); 

    $form->add(
     // Replace original field... 
     'field_to_update', 
     $config->getType()->getName(), 
     // while keeping the original options... 
     array_replace(
      $options, 
      [ 
       // replacing specific ones 
       'required' => false, 
      ] 
     ) 
    ); 
}); 

출처 : 원래의 질문이 아니라 오래 동안 날 경우 다른 사람에 여기를 떠나게

+2

5.3에서 콜백 앞에'$ that = $ this;'를 쓰고'$ this-> factory'를'$ that-> factory'로 변경하십시오. – moteutsch

20

다시 모든 옵션을 복제 할 필요없이 필드의 특정 옵션을 변경의 필요성을 가로 질러 온다 : https://github.com/symfony/symfony/issues/8513#issuecomment-21868035

+9

동일한 문제가 있지만 Symfony 3을 사용했습니다.'$ config-> getType-> getName() 대신'get_class ($ config-> getType() -> getInnerType())'을 사용하십시오. 이것은 Symfony 3에서 유형을 정규화 된 클래스 이름으로 요구하기 때문입니다. – TheNextBigThing

+1

방금 ​​내 하루를 저장했습니다 ... 둘 다! – Delphine

관련 문제