Событие 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