Symfony2 Form ChoiceType [单选按钮]

时间:2016-12-23 10:37:04

标签: php forms symfony

我在这里有一个简单的问题,因为我无法弄清楚我做错了什么或Symfony2 Forms组件不能始终如一地工作。方案如下:

  • 我有一个自定义表单类型[ChoiceType“子”类型]的表单,其中包含一些预定义值
  • 我需要此自定义表单类型,以便在[之前尚未提交表单]之前未选择任何值时选择默认值
  • 然后,我可能还会根据用户的设置[首选项]
  • 预先填充此表单

我期望发生的事情:

  1. 没有用户首选项 - 表单字段具有默认值[0]
  2. 可用的用户首选项 - 表单字段在$data参数[0-7]
  3. 中传递了值
  4. 表单正在提交 - 表单字段的值是已提交的表单[0-7]
  5. 实际发生的事情:

    • 如果表单字段设置为select ['expanded' => false],则它对两个显示都有效(选择第一个值[0] - 可能是因为它是第一个)和提交(0正在提交)
    • 如果表单字段是单选按钮列表['expanded' => true],则不会选择任何值开始,并且提交表单也不会提交任何值。

    有人可以解释一下如何选择单选按钮吗?如果没有提交,我可以使用empty_data设置值,但是初始表单显示怎么办?根据{{​​1}}进行选择(对于选择框和单选按钮)是完美的。

    我也不能使用empty_value选项,因为它会覆盖传递给表单的任何数据(参见上面的第2点)以及提交的数据。

    @EDIT

    我想避免两件事:

    • 使用JavaScript绝对不是一个选项
    • 覆盖模板也是我想要避免的,主要是因为我目前正在使用bootstrap主题作为基础,后来将被适当的前端/模板替换

1 个答案:

答案 0 :(得分:0)

我不确定你的问题。 要管理表单默认值,您只需要设置映射对象的属性。

例如:

$formObject->child->attributeDefault = "defaultValue";
if($hasPreference) {
  $formObject->child->attribute1 = "preferenceDefautlValue"
}
$form = $this->createForm(new YourFormType(), $formObject);

$form->handleRequest($request) //overide default value by submitted one