更新表单提交上的symfony字段

时间:2014-01-13 11:19:14

标签: symfony

假设我有一个这样的简单形式:

class MyType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('field', 'text');

        // this is select
        $builder->add('field2', 'choice', array(
            'choices' => array(),
            'expanded' => false,
            'multiple' => false,
        ));
    }
}

现在我想更新表单提交上的field2选项。 所以流程是:

  1. 访问包含空表单的页面
  2. 填写field1并提交表单
  3. 表单将“验证失败”,因为它缺少field2的值,但这次它会根据field2提交的值field1呈现包含field2选项的表单> 选择
  4. field1的值,并与提交的$form->get('field2')->**update**('choices', array(1=>'test')); 一起填写(在步骤2中填写)
  5. 表单验证通过
  6. 我尝试了什么

    1

    How to Dynamically Modify Forms Using Form Events

    这里他们讨论了如何根据提交的表单添加新字段,但我需要更新已有的字段。所以在事件函数中有类似的东西:

    **update**

    然而我无法弄清楚如何执行此操作,因为没有函数$builder->get('field2')->remove(); $builder->add('field2', 'choice', array(...));

    我可以在这样的表单事件中重新创建field2:

    field1

    但这似乎不对。

    2

    在控制器中获取MyType的值,并将其作为自定义选项传递给我的choices,并在表单创建期间根据field2上的$request->query->get('field1');设置。< / p>

    我的问题是,如果我这样做,我必须直接从$form->getData()->getField1()获取值,这是错误的。我需要让表单处理请求,然后通过DataTransformer获取值,以便表单有机会处理field1附加到$entity = new Entity(); $form = $this->createCreateForm($entity); $form->handleRequest($request); $value = $form->getData()->getField1();

    $value

    我在控制器中的代码是由symfony2生成的标准代码:

    createCreateForm()

    现在为时已晚,无法将{{1}}传递给表单构建器,因为表单已在{{1}}中创建

    任何想法?

1 个答案:

答案 0 :(得分:0)

您可以尝试在第一次尝试的解决方案中替换此块:

$builder->get('field2')->remove();
$builder->add('field2', 'choice', array(...));

通过这个:

$builder->remove('field2');
$builder->add('field2', 'choice', array(...));