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

Событие PRE_SUBMIT

Событие PRE_SUBMIT возникает в момент, когда форма получает данные из запроса, но ещё не записала их в сущность. Оно позволяет перехватить и изменить массив данных до того, как он будет передан в модель. Первым параметром обработчик получает событие FormEvent, из которого можно извлечь данные через метод getData. Изменённые данные возвращаются через метод setData.

Синтаксис

$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) { $data = $event->getData(); $event->setData($data); });

Пример

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

<?php namespace AppForm; use SymfonyComponentFormAbstractType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentFormFormEvent; use SymfonyComponentFormFormEvents; use SymfonyComponentFormExtensionCoreTypeTextType; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder->add('text', TextType::class); $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) { $data = $event->getData(); $data['text'] = strtoupper($data['text']); $event->setData($data); }); } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'data_class' => null, ]); } } ?>

Теперь при отправке формы значение поля text будет приведено к верхнему регистру. Результат выполнения кода для значения 'abcde':

"ABCDE"

Пример

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

<?php namespace AppForm; use SymfonyComponentFormAbstractType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentFormFormEvent; use SymfonyComponentFormFormEvents; use SymfonyComponentFormExtensionCoreTypeIntegerType; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder->add('integer', IntegerType::class); $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) { $data = $event->getData(); $data['integer'] = $data['integer'] * 2; $event->setData($data); }); } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'data_class' => null, ]); } } ?>

Результат выполнения кода для значения 5:

10

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

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