0

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

示例表格

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。如果 data['id'] 低于 1,则有一个添加按钮。如果 id 高于 0,则有一个保存按钮。

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

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

4

1 回答 1

2

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

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