Событие POST_SET_DATA
Событие POST_SET_DATA относится к событиям формы.
Оно возникает после того, как в форму были установлены
данные через метод setData. Это событие позволяет
получить доступ к данным формы сразу после их установки
и, при необходимости, изменить их или выполнить
дополнительную логику. Первым параметром в обработчик
передаётся объект события FormEvent, из которого
можно получить саму форму и её данные.
Синтаксис
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
// logic
});
Пример
Давайте создадим форму и повесим обработчик на событие
POST_SET_DATA, который выведет данные формы:
<?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;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('title', TextType::class);
$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
echo 'post set data: ' . $data;
});
}
}
?>
Пример
Давайте установим данные в форму и посмотрим,
что вернёт обработчик события POST_SET_DATA:
<?php
namespace App\Controller;
use App\Form\ArticleType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_form')]
public function form(): Response
{
$form = $this->createForm(ArticleType::class);
$form->setData('article');
return new Response('done');
}
}
?>
Результат выполнения кода:
post set data: article
Пример
Давайте в обработчике события POST_SET_DATA
изменим данные формы через метод setData:
<?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;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('title', TextType::class);
$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
$event->setData('abcde');
});
}
}
?>
Смотрите также
-
событие
PRE_SET_DATA,
которое возникает перед установкой данных в форму -
событие
PRE_SUBMIT,
которое возникает перед отправкой формы -
событие
SUBMIT,
которое возникает при отправке формы -
событие
POST_SUBMIT,
которое возникает после отправки формы