#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()
метода. Не репозиторий