我有一个带有一个默认值的表单:
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 对象。我不喜欢这个解决方案。有人知道更好的方法吗?