2013-02-16 33 views
1

有一个默认值的形式: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对象传递附加参数。我不喜欢这个解决方案。有谁知道更好的方法?

回答

0

添加这个片段,和更改的[]作为适当

 $form->bind($request); 
     if ([ passed parameters from querystring ]){    //// New Code 
      $form->getData()->setOptions([ processed parameter ]); //// New Code 
     }               //// New Code 
     if ($form->isValid()) { 
      return 'is valid'; 
     } 
+0

遗憾的是没有 - 它会导致致命错误:调用未定义的方法的Symfony \分量\表\表:: setOptions( ) – mrok 2013-02-20 19:13:09

+0

我的歉意,我忘了调用$ form的getData()。上面编辑。 – Lighthart 2013-02-20 21:20:58

+0

$ form-> getData()返回null或我的实体(当我绑定请求并关闭CSRF时) - 它们仍然没有setOptions方法 – mrok 2013-02-20 22:28:07

0

原因之间田间options总是具有默认值可以是实际的查询。代替反规范化和数据直接设置的,修改else片段:

} else { 
    $form = $this->createForm(new GearType(), new Gear(), array(
     'validation_groups' => array('not-validating') 
    )); 
    $form->bind($request); 
} 

形式将仅验证对与not-validating组相关联的验证,这将避免显示如果窗体建筑形式GET共同required警报。

文件关于 '验证团':http://symfony.com/doc/current/book/forms.html#validation-groups

的问题是相似的:Entity form field and validation in Symfony2?