Як відправити форму з декількома кнопками

Дата оновлення перекладу 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()) {
    // ... виконати якусь дію, наприклад, зберегти завдання у базу даних

    $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')){
    // ...
}