РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
424 of 1361 menu

Событие POST_SUBMIT

Событие POST_SUBMIT относится к событиям формы и вызывается после того, как форма была отправлена и обработана. Оно возникает после события SUBMIT, когда данные уже записаны в форму, но ещё до того, как форма будет возвращена для отображения. Это событие удобно использовать для выполнения действий, зависящих от итогового состояния формы, например, для сохранения данных в базу или изменения других полей.

Обработчик события получает объект FormEvent, через который можно получить доступ к самой форме и к исходным данным. Изменение данных на этом этапе не влияет на уже выполненные проверки, но может быть использовано для дальнейшей логики. Событие доступно через константу FormEvents::POST_SUBMIT.

Синтаксис

use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) { // logic });

Пример

Давайте создадим форму с полем text и повесим на событие POST_SUBMIT обработчик, который выводит сообщение после успешной отправки:

<?php namespace App\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('text', TextType::class) ->add('save', SubmitType::class) ->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) { $form = $event->getForm(); if ($form->isValid()) { echo "form is valid"; } }); } } ?>

Пример

Давайте через событие POST_SUBMIT изменим значение другого поля после отправки формы:

<?php namespace App\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('text', TextType::class) ->add('status', TextType::class) ->add('save', SubmitType::class) ->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) { $form = $event->getForm(); if ($form->isValid()) { $form->get('status')->setData('processed'); } }); } } ?>

После отправки формы поле status получит значение 'processed'.

Пример

Давайте используем событие POST_SUBMIT в контроллере для сохранения данных после успешной валидации:

<?php namespace App\Controller; use App\Form\ArticleType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; class ArticleController extends AbstractController { public function new(Request $request): Response { $form = $this->createForm(ArticleType::class); $form->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) { $form = $event->getForm(); if ($form->isValid()) { // save data } }); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { return new Response('saved'); } return $this->render('article/new.html.twig', [ 'form' => $form->createView(), ]); } } ?>

Результат выполнения кода при успешной отправке:

"saved"

Смотрите также

  • событие PRE_SUBMIT,
    которое срабатывает перед обработкой отправленной формы
  • событие SUBMIT,
    которое срабатывает в момент обработки отправленной формы
  • метод isValid,
    который проверяет валидность формы
  • метод getData,
    который возвращает данные формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить