Как отправить форму с несколькими кнопками
Дата обновления перевода 2023-09-07
Как отправить форму с несколькими кнопками
Когда ваша форма содержит более одной кнопки отправки, вам нужно будет проверить, какую кнопку нажали, чтобы адаптировать работу программы в вашем контроллере. Чтобы сделать это, добавьте вторую кнопку с титром "Сохранить и добавить" в вашу форму:
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')){
// ...
}