2016-06-23 6 views
-1

Я создаю пользовательскую форму с помощью Symfony2. Я создал «первую часть» формы с использованием Symfony как следующий код:Добавить HTML-вход в форму Symfony 2

class TelemedidaMecanicaLecturaType extends AbstractType{ 
 
    
 
    /** 
 
    * @param FormBuilderInterface $builder 
 
    * @param array $options 
 
    */ 
 
    public function buildForm(FormBuilderInterface $builder, array $options) { 
 
     $builder 
 
       ->add('fecha') 
 
       ->add('valor') 
 
     ; 
 
    } 
 
}

Затем в шаблоне Twig мне нужно добавить три дополнительных поля: кнопки отправки и два скрытых которые мне нужны для получения важной информации. Я пытался сделать это:

<form method="post" id="FormLec{{um.id}}"> 
 
      {{ form_widget(formLecArr[um.um]) }} 
 
      <input type="hidden" name="um" value="{{um.id}}"/> 
 
      <input type="hidden" name="telemedidaMecanica" value="{{telemedidaMecanica.id}}"/> 
 
      <input type="submit" value="Crear"/> 
 
     </form>

Но когда я отправить форму, и я стараюсь, чтобы получить данные от контроллера, я получаю только «Fecha» и ценности «доблесть». Странно, потому что в тексте HTML отображаются недостающие поля (с использованием утилиты проверки кода в хроме), и кнопка отправки работает правильно. Где находятся значения "um" и "telemedidaMecanica"? Что я делаю неправильно?

Спасибо! Исаак.

+0

Вам нужно добавить все поля формы в форму FormType или проигнорировать. Есть ли причина, по которой вы не можете получить эти значения в Типе и установить их как значения по умолчанию там. Если нет, вы можете разместить их в другом месте в шаблоне и установить их после загрузки с помощью jQuery или некоторых таких, но это немного наоборот. – Bat

ответ

1

Что вам нужно сделать, так это передать все поля формы в FormType при создании формы. Кнопка «Отправить» публикует только те значения, которые были созданы в Formbuilder.

Вы можете сделать что-то вроде этого:

class TelemedidaMecanicaLecturaType extends AbstractType{ 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) { 
     $builder 
       ->add('fecha') 
       ->add('valor') 
       ->add('um','hidden') 
       ->add('telemedidaMecanica','hidden') 
     ; 
    } 
} 

В качестве альтернативы, если у вас нет доступа к этим переменным в самой вашей Сущности, вы можете передать значения, когда вы создать экземпляр FormBuilder из контроллера сам.

Что-то вроде этого в контроллере будет работать:

$form = $this->createForm(new TelemedidaMecanicaLecturaType($um, $telemedidaMecanica); 

, а затем в вашем FormBuilder вы можете воспользоваться data свойством формы. Сделайте это:

class TelemedidaMecanicaLecturaType extends AbstractType{ 

    private $um; 
    private $telemedidaMecanica; 

    public function __construct($um, $telemedidaMecanica) 
    { 
     $this->um= $um; 
     $this->telemedidaMecanica= $telemedidaMecanica; 
    } 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) { 
     $builder 
       ->add('fecha') 
       ->add('valor') 
       ->add('um','hidden', array('data' => $this->um, 'mapped' => false)) 
       ->add('telemedidaMecanica','hidden', array('data' => $this->telemedidaMecanica, 'mapped' => false)) 
     ; 
    } 
} 

Это также опубликует скрытые значения при нажатии кнопки «Отправить».

+0

Просто не забудьте добавить для этих полей 'mapping' => false, если они не являются частью объекта – Strnm

+0

Я не знаю, как я мог забыть включить это. Спасибо @Stmm –

+0

Спасибо :) Добавить поля в FormType было решено! –

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