How to Submit a Form with Multiple Buttons

When your form contains more than one submit button, you will want to check which of the buttons was clicked to adapt the program flow in your controller. To do this, add a second button with the caption "Save and Add" to your form:

フォームに複数の送信ボタンが含まれている場合、コントローラのプログラム フローを調整するためにどのボタンがクリックされたかを確認する必要があります。これを行うには、「保存して追加」というキャプションを持つ 2 つ目のボタンをフォームに追加します。
1
2
3
4
5
6
$form = $this->createFormBuilder($task)
    ->add('task', TextType::class)
    ->add('dueDate', DateType::class)
    ->add('save', SubmitType::class, ['label' => 'Create Task'])
    ->add('saveAndAdd', SubmitType::class, ['label' => 'Save and Add'])
    ->getForm();

In your controller, use the button's isClicked() method for querying if the "Save and Add" button was clicked:

コントローラーで、[保存して追加] ボタンがクリックされたかどうかを照会するために、ボタンの sisClicked() メソッドを使用します。
1
2
3
4
5
6
7
8
9
if ($form->isSubmitted() && $form->isValid()) {
    // ... perform some action, such as saving the task to the database

    $nextAction = $form->get('saveAndAdd')->isClicked()
        ? 'task_new'
        : 'task_success';

    return $this->redirectToRoute($nextAction);
}

Or you can get the button's name by using the getClickedButton() method of the form:

または、フォームの getClickedButton() メソッドを使用して、ボタンの名前を取得できます。
1
2
3
4
5
6
7
8
9
if ($form->getClickedButton() && 'saveAndAdd' === $form->getClickedButton()->getName()) {
    // ...
}

// when using nested forms, two or more buttons can have the same name;
// in those cases, compare the button objects instead of the button names
if ($form->getClickedButton() === $form->get('saveAndAdd')){
    // ...
}