Событие SUBMIT
Событие SUBMIT относится к классу FormEvents и
срабатывает в момент отправки формы, сразу после того как
Symfony привязал данные запроса к форме, но до того как
запустился процесс валидации. Обработчик этого события
получает объект FormEvent, из которого можно извлечь
саму форму через метод getForm и отправленные данные
через метод getData. Событие удобно использовать для
динамического изменения полей формы или для нормализации
введённых значений перед проверкой.
Синтаксис
$builder->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) {
// ...
});
Пример
Давайте создадим форму с полем text и в обработчике
события SUBMIT приведём введённую строку к нижнему
регистру:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('text', TextType::class);
$builder->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
$event->setData(mb_strtolower($data['text']));
});
}
}
?>
Пример
Давайте выведем значение поля text прямо в обработчике
события SUBMIT после его изменения:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('text', TextType::class);
$builder->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) {
$data = $event->getData();
echo $data['text'];
});
}
}
?>
Результат выполнения кода для введённой строки 'abcde':
"abcde"
Пример
Давайте динамически добавим новое поле integer в форму
внутри обработчика события SUBMIT на основе значения
поля text:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('text', TextType::class);
$builder->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
if ($data['text'] === 'abcde') {
$form->add('integer', IntegerType::class);
}
});
}
}
?>
Смотрите также
-
событие
PRE_SUBMIT,
которое срабатывает до привязки данных к форме -
событие
POST_SUBMIT,
которое срабатывает после отправки формы -
метод
submit,
который запускает процесс отправки формы -
метод
handleRequest,
который обрабатывает запрос и вызывает событие SUBMIT