Symfony preSubmit () затем onSubmit () - PullRequest
0 голосов
/ 17 января 2019

Я обновляю данные на моем presubmit ()

 public function onPreSubmit(FormEvent $event) {
    $data = $event->getData();

    unset($data['test']);

    $event->setData($data);
}

Когда я сбрасываю dump($event->getData()) в конце моей функции preSubmit (), все данные в порядке. Но когда я пытаюсь получить данные в моей функции onSubmit(), данные сбрасываются ...

public function onSubmit(FormEvent $event) {
    $data = $event->getData();
}

Ключ "test" все еще присутствует ... Как это возможно?

В моей функции buildForm () присутствуют события:

public function buildForm(FormBuilderInterface $builder, array $options) {
    ...
    ...
    $builder->addEventListener(FormEvents::POST_SET_DATA, [$this, 'onPostSetData']);
    $builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'onPreSubmit']);
    $builder->addEventListener(FormEvents::SUBMIT, [$this, 'onSubmit']);
}

1 Ответ

0 голосов
/ 17 января 2019

Ну, Компонент Формы действительно довольно сложный. Существует три типа данных во время обработки формы - данные модели, нормализованные данные и данные просмотра. И дополнительно для события PRE_SUBMIT есть данные запроса.

В зависимости от того, о каком событии мы говорим, могут быть другие данные, передаваемые слушателю события. В соответствии с Форма Компонента документации :

  • FormEvents::PRE_SUBMIT событие имеет данные запроса
  • FormEvents::SUBMIT событие имеет нормализованные данные

Поэтому, когда вы сбрасываете что-то в данных запроса в PRE_SUBMIT, это похоже на то, что оно никогда не передавалось в форму. Но это не означает, что он не будет присутствовать в данных модели / нормализованных / представленных данных после обработки этих данных по умолчанию Преобразователи данных .

Трудно дать вам точное решение, потому что это зависит от того, чего вы хотите достичь. Но я могу сказать, что если вы хотите изменить способ обработки данных, вам, вероятно, следует использовать преобразователи данных вместо событий формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...