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

Что вы подразумеваете под «рендерингом перед подачей»? Это javascript, который должен делать этот трюк? Если это так, просто добавьте класс (например, «скрытый»), который сначала скрывает кнопку, и пусть jQuery показывает ее перед отправкой. – Rvanlaak

ответ

0

Компонент формы Symfony не поддерживает переупорядочивание полей формы. Они рассказали об этой функции по выпуску #5827 и #11241.

Вы можете попытаться удалить поле submit в EventListener, затем добавить headquerter, а также submit (да, еще раз). Но я не уверен, что это будет работа.

Другое решение - установить IvoryOrderedFormBundle. Он добавляет новую опцию в поля формы: position.

+0

да, я видел эти проблемы на github, и я был, как будто надеюсь, что они поместили его в 3.0 :)), тогда я заметил, что они не = D. также я видел IvoryOrderedFormBundle, но не был уверен, что я должен использовать его = D. я попытался удалить и добавить его снова, но он не работал, я всегда получаю ошибку выше: D –

1

Решение, которое я использовал, состояло в том, чтобы удалить кнопку отправки из класса и вручную добавить ее в шаблон, а затем использовать {{form_rest (form)}} перед кнопкой отправки, и это сделает ее в порядке.

Смежные вопросы