Как я могу задать имя формы с помощью Symfony formbuilder?

#php #symfony #oop #formbuilder

#php #symfony #ооп #formbuilder

Вопрос:

Я создаю форму с помощью Symfony formbuilder:

 $options =  [
     'attr'   => array('class' => 'form-control',),
     'data' => $data,
       ];

 $formBuilder->add($name, $class, $options);
  

Когда я смотрю сейчас на свою форму, поле выглядит следующим образом:

 <input name="form[color]" value="#c651a8" class="form-control">
  

Но я хочу заменить form[color] на 12345 . Результат, который я хотел бы получить, это:

 <input name="12345" value="#c651a8" class="form-control">
  

Я пробовал разные вещи, такие как, например:

   $options =  [
           'attr'   => array('class' => 'form-control','name' => '12345',),
           'data' => $data,
           ];
  

или

   $options =  [
           'attr'   => array('class' => 'form-control'),
           'name' => '12345',
           'data' => $data,
           ];
  

Но я не смог найти решение.

Ответ №1:

Если вы используете FormType класс, внедрите getName() метод:

 public function getName()
{
    return null;
}
  

Если вы создадите форму с помощью form factory сервиса следующим:

 $formBuilder = $this->get('form.factory')
    ->createNamedBuilder(null);

$options =  [
    'attr'   => array('class' => 'form-control',),
    'data' => $data,
];

$formBuilder->add('12345', $class, $options);
  

Комментарии:

1. Спасибо, это работает очень хорошо, у меня просто есть одна проблема. Я использую это в цикле foreach ($fields as $field) {$formBuilder->add('12345', $class, $options); } , и проблема в том, что мои поля теперь пусты, я думаю, из-за NULL. У вас есть рекомендации?

2. Или я поместил функцию getName() не в то место? Я помещаю это сейчас в репозиторий моей страницы

3. Если вы используете этот случай ( symfony.com/doc/current/forms.html#creating-form-classes ) вы должны расширить этот класс form с помощью getName() метода. Не репозиторий