2016-10-10 20 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

你在提交之前渲染的意思是什麼?它應該做這個伎倆的JavaScript?如果是這樣,只需添加一個類(如'hidden'),它最初隱藏了按鈕,並讓jQuery在提交之前顯示它。 – Rvanlaak

回答

0

Symfony的窗體組件不支持重新排列窗體的字段。他們談到了這個問題#5827#11241

你可以嘗試在事件監聽除去場submit,再加入headquertersubmit(是的,再次)。但我不確定這是否會奏效。

另一種解決方案是安裝IvoryOrderedFormBundle。它在表單字段中添加了新選項:position

+0

是的,我看到在github上的問題,我很喜歡,我希望他們把它在3.0 :)),然後我發現他們沒有= d。我也看到了IvoryOrderedFormBundle,但不知道我是否應該使用它= D。我試圖刪除並再次添加它,但它不起作用,我總是得到上述錯誤:D –

1

,我使用的解決方案是從類型除去提交按鈕和手動在模板添加它然後提交按鈕之前使用{{form_rest(形式)}},它會呈現它確定。