在提交的表单中更改标签 - finishView功能?

时间:2013-07-06 14:08:20

标签: symfony symfony-forms symfony-2.3

如何在提交表单字段后更改表单字段的标签?

示例表格

class TestType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('test', 'number')
            ->add($options['data']->getId() > 0 ? 'save' : 'add', 'submit')
        ;
    }

    public function finishView(FormView $view, FormInterface $form, array $options)
    {
        if($form->has('add'))
        {
            $form->remove('add');
            $form->add('add', 'submit', array('label' => 'save'));
        }
    }

    public function getName()
    {
        return '';
    }
}

表单完全由“{{form(form)}}”生成。 我只使用FormType。 如果数据['id']低于1,则有一个添加按钮。如果id高于0,则有一个保存按钮。

首次提交新表单后,实体将被保存,在完成页面加载后,我会看到“添加”字段而不是“保存”字段。

如果我手动重新加载完整页面,我会看到保存按钮...

1 个答案:

答案 0 :(得分:2)

您不需要finishView方法来实现您想要的效果。您正在删除并重新添加添加按钮。这没有任何意义。

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $buttonName = $options['data']->getId() > 0 ? 'save' : 'add';
    $builder
        ->add( /* ... */)
        ->add($buttonName, 'submit', array('label' => $buttonName))
    ;
}