Symfony2: как изменить значение скрытого поля в PRE_SUBMIT

Вот как скрытое значение добавляется в $formBuilder :

->add('depth', 'hidden', array('mapped'=>false, 'data' => 1))

У меня есть функция, которая запускается ON_PRE_SUBMIT, в строке ниже я предполагал, что значение этого поля изменится, но это не так.

$form->get('depth')->setData($depth++); //$depth = $form->get('depth')->getData();

Я также пытался сделать, как показано здесь :

$data = $event->getData();
$data['depth'] = $depth++;
$form->setData($data);

Но ничего не меняется. Я пробовал приведенные выше коды в других полях, и они обычно меняют значения полей. Я что-то пропустил?


person stevenll    schedule 01.07.2014    source источник


Ответы (2)


Установите данные в $event:

$data = $event->getData();
$data['depth'] = $depth + 1;
$event->setData($data);
person Nikola K.    schedule 22.01.2016

Одна вещь, которую я заметил, это то, что вы используете $depth++, который сначала присваивает значение, а затем увеличивает его, поэтому в конечном итоге вы назначите старое значение. попробуй изменить это:

$form->get('depth')->setData(++$depth);

Можете ли вы также попробовать изменить событие на POST_SUBMIT, я полагаю, что если вы используете PRE_SUBMIT, отправленные данные переопределяют любые данные, которые вы изменили на PRE_SUBMIT

person trrrrrrm    schedule 01.07.2014
comment
Пожалуйста, объясните, почему это решает проблему. - person Nathaniel Ford; 02.07.2014
comment
Несмотря на то, что я очень скептически относился к теориям до и после увеличения здесь, я попробовал это и могу подтвердить, что значение «глубины» остается прежним. - person stevenll; 02.07.2014
comment
Я обновил свой ответ, проверьте, решает ли мое другое предложение вашу проблему. - person trrrrrrm; 02.07.2014
comment
Вы не можете изменить данные отправленной формы. 500 Внутренняя ошибка сервера — УжеSubmittedException - person stevenll; 02.07.2014
comment
тогда лучше всего использовать преобразователи данных, описанные здесь symfony.com/doc/master. /cookbook/form/data_transformers.html - person trrrrrrm; 03.07.2014