2016-10-10 2 views
4

다음 양식 유형이 주어지면 제출하기 전에 두 번째 필드를 어떻게 렌더링 할 수 있습니까? 나는 $form->remove와 시도했지만 난 항상이 오류를 얻을 것이다 :Symfony pre_submit 필드 순서 변경

Warning: Illegal offset type in isset or empty 

하지 않음이 하나를 해결하는 방법을 정말 확실합니다.

/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('survey', EntityType::class, [ 
      'class' => SurveyManager::class, 
      'attr' => [ 
       'class' => 'field-change', 
      ], 
     ]) 
     ->add('submit', SubmitType::class, [ 

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

       $data = $event->getData(); 
       $modifier = $data['survey']; 
       $form->add('headquarter', EntityType::class, [ 
        'class' => HeadQuarterManager::class, 
        'query_builder' => function (HeadQuarterManagerRepository $er) use ($modifier) { 
         return $er->getHeadquarter($modifier); 
        }, 
       ]); 
      } 
     ); 
} 
+0

'제출하기 전에 렌더링'이란 무엇을 의미합니까? 그 트릭을해야 자바 스크립트인가요? 그렇다면 처음에는 버튼을 숨긴 클래스 (예 :'숨김 ')를 추가하고 jQuery가 제출하기 전에이를 표시하도록합니다. – Rvanlaak

답변

0

Symfony의 양식 구성 요소는 양식의 필드를 재정렬하는 것을 지원하지 않습니다. 그들은이 문제에 대해 #5827#11241에 대해 이야기했습니다.

EventListener에서 submit 필드를 제거한 다음 headquertersubmit (예, 다시 한번)을 추가 할 수 있습니다. 그러나 이것이 이것이 작동 할 지 확신하지 못합니다.

다른 해결책은 설치 IvoryOrderedFormBundle입니다. 양식 필드에 새로운 옵션 인 position을 추가합니다.

+0

그래, 나는 github에 그 문제를 보았다. 나는 그들이 3.0에 넣었 으면 좋겠다. :)) 그런 다음 나는 D가 없다는 것을 알아 차렸다. 또한 IvoryOrderedFormBundle을 보았지만 사용해야하는지 확실하지 않았습니다. 내가 제거하고 다시 추가했지만 작동하지 않았다 난 항상 위의 오류 : D 조 –

1

내가 사용한 솔루션은 클래스 유형에서 제출 버튼을 제거하고 수동으로 템플릿에 추가 한 다음 제출 버튼 앞에 {{form_rest (form)}}을 사용하면 괜찮습니다.