symfony2选择单选框的默认值

时间:2014-10-23 09:11:37

标签: php forms symfony silex choice

我的项目是使用Silex和Symfony Components(即表单组件)编写的。

我尝试创建一组由班级构建的单选按钮,我想预先选择其中一个收音机。

我创建了这样的形式:

$form = $app['form.factory']->createBuilder(new QueryFormType(), $query)

其中QueryFormType是我的自定义类型(它扩展AbstractType),我在其中定义表单字段,$query是一个具有表单默认值的实体。

QueryFormType中的表单字段看起来像那样(为了清楚起见,我省略了构建器和其他字段):

->add('contractPeriod', 'filter', array(
  'label' => 'Contract Period:',
  'choices' => array(
    '-1' => 'No period',
    '1' => '1 month',
    '2' => '2 months',
    '3' => '3 months',
    '6' => '6 months',
    '12' => '12 months',
    '18' => '18 months'
  ),
  'expanded' => TRUE,
  'multiple' => FALSE
))

$query是应该预选单选按钮的类的实例。在它的构造函数中,您将找到:

$this->contractPeriod = '3';

它也具有此属性的正确getter和setter。

现在。表单和单选按钮正确呈现。单选按钮已预先选择为'3' => '3 months'。当我在定义列表中检查更高的无线电(因此2,1或-1)时,将其接受为值。但是当我在定义的列表(6,12或18)中检查值较低时,它使用$query中设置的默认值。到底是什么?

我的问题是如何正确设置默认值,以便在表单呈现后我可以选择其他任何值?

我已经尝试过使用'数据'表单字段定义中的属性,它是相同的故事。我只能选择较低的值但不能更高。我厌倦了使用" preferred_choices'但它没有按照我预期的方式工作(弄乱了输入的ID)。

求求你帮忙。

修改

这是我提交表单的方式:

$form->submit($request->query->get($form->getName()), FALSE);

我发现如果我将clearMissing设置为TRUE(第二个参数)它运行良好,但我不能进行部分预填充(或修补表单)。似乎是一个错误。

修改

它与symfony组件的Form类中的那些行有关:

if ($isSubmitted || $clearMissing) {
    $child->submit($isSubmitted ? $submittedData[$name] : null, $clearMissing);
    unset($submittedData[$name]);

    if (null !== $this->clickedButton) {
        continue;
    }

    if ($child instanceof ClickableInterface && $child->isClicked()) {
        $this->clickedButton = $child;

        continue;
    }

    if (method_exists($child, 'getClickedButton') && null !== $child->getClickedButton()) {
        $this->clickedButton = $child->getClickedButton();
    }
}

$ child->只有在表格中设置的默认值低于/等于它的父级(在本例中为Form)时,才将提交更新viewData的数据提交给提交值。为什么呢?

修改

我认为Form组件在默认值之后不会提交子节点,在那种情况下是Submited == false和clearMissing == false。这使得只有值可达到默认值。但我不知道。

0 个答案:

没有答案