У меня есть форма со значением по умолчанию: одинSymfony2 форма - как перезапись поле со значением по умолчанию
class GearType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('options')
->add('model', 'choice', array('choices' => $this->getModelChoices(), 'data' => 2));
}
одно из требований форма может быть предварительно населен повторно-продавцов путем передачи параметров в URL. Это также хорошая возможность для потенциальных клиентов, чтобы скопировать и вставить ссылку на электронную почту, коммуникаторы и т.д.
Я сделал это так:
/**
* @Route("/car/gear")
* @Template()
*/
public function gearAction(Request $request)
{
$form = $this->createForm(new GearType());
if ($request->isMethod('POST')) {
$form->bind($request);
if ($form->isValid()) {
return 'is valid';
}
} else {
$get = $this->getRequest()->query->all();
if (!empty($get)) {
$normalizer = new GetSetMethodNormalizer();
$form->setData($normalizer->denormalize($get, new Gear())); # look here
}
}
return array('form' => $form->createView());
}
, к сожалению, «опции» поле имеет значение по умолчанию всегда, вместо значения, переданного как параметр. Я попытался изменить строки # смотрите здесь в
$gear = $normalizer->denormalize($get, new Gear());
$form = $this->createForm(new GearType(), $gear);
, но безрезультатно.
Похоже, что решение передает дополнительный параметр в объект GearType. Мне не нравится это решение. Кто-нибудь знает лучший способ?
К сожалению нет - это вызывает Фатальная ошибка: Вызов неопределенной метод Symfony \ Component \ Form \ Form :: setOptions () – mrok
Мои извинения, я забыл вызов getData() в $ form. отредактировано выше. – Lighthart
$ form-> getData() возвращает null или мою сущность (когда я связываю запрос и выключаю CSRF) - они все еще не имеют метода setOptions – mrok