有一个默认值的形式: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 \分量\表\表:: setOptions( ) – mrok 2013-02-20 19:13:09
我的歉意,我忘了调用$ form的getData()。上面编辑。 – Lighthart 2013-02-20 21:20:58
$ form-> getData()返回null或我的实体(当我绑定请求并关闭CSRF时) - 它们仍然没有setOptions方法 – mrok 2013-02-20 22:28:07