Как отправить форму с несколькими кнопками

Дата обновления перевода 2022-01-17

Как отправить форму с несколькими кнопками

Когда ваша форма содержит более одной кнопки отправки, вам нужно будет проверить, какую кнопку нажали, чтобы адаптировать работу программы в вашем контроллере. Чтобы сделать это, добавьте вторую кнопку с титром "Сохранить и добавить" в вашу форму:

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();

В вашем контроллере, используйте метод кнопки isClicked(), чтобы запросить, была ли нажата кнопка "Сохранить и добавить":

1
2
3
4
5
6
7
8
9
if ($form->isSubmitted() && $form->isValid()) {
    // ... выполнить какое-то действие, например, сохранить задание в DB

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

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

Или вы можете получить имя кнопки, используя метод формы getClickedButton():

1
2
3
4
5
6
7
8
9
if ($form->getClickedButton() && 'saveAndAdd' === $form->getClickedButton()->getName()) {
    // ...
}

// при использовании вложенных форм, две или более кнопки имеют одинаковое имя;
// в таких случаях, сравнивайте объекты кнопок, а не имена
if ($form->getClickedButton() === $form->get('saveAndAdd')){
    // ...
}