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 '';
    }
}

フォームは完全に「{{フォーム(フォーム)}}」で生成されます。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 に答える