1 Отредактировано Vdomah (2013-04-17 10:29:39)

Тема: [РЕШЕНО] Слетает дефолтное значение в форме при отправке формы

Кручу уже несколько часов эту проблему со всех сторон и пока не вижу ответа.

При отправке формы, которая добавляет новую еду в таблицу базы есть поле disabled, в котором находится id каррент юзера. На это поле задано дефолтное значение в классе FoodForm, которое срабатывает при загрузке формы как ожидается:

    $user = sfContext::getInstance()->getUser();
    $this->setDefault('user_id', $user->getId());

Но, почему-то, при сабмите мне говорят, что это поле не заполнено и отрисовывают форму, где в поле user_id уже не выбрано ни одного значения.
schema:

user_id:                { type: integer, foreignTable: user, foreignReference: id, onDelete: cascade, required: true }

BaseFoodForm:

$this->setWidgets(array(
      'id'                      => new sfWidgetFormInputHidden(),
      'user_id'                 => new sfWidgetFormPropelChoice(array('model' => 'User', 'add_empty' => false)),

2

Re: [РЕШЕНО] Слетает дефолтное значение в форме при отправке формы

Vdomah пишет:

есть поле disabled, в котором находится id каррент юзера

Если поле disabled, то совершенно без разницы что в нем находится или не находится, оно никуда не передается. Поле disabled фактически означает, что такого поля в форме нет.
А что там у вас в логике формы - про это кроме вас никто не знает. Если форме нужно это поле, тогда какого хера оно disabled?

3

Re: [РЕШЕНО] Слетает дефолтное значение в форме при отправке формы

Vdomah пишет:

При отправке формы, которая добавляет новую еду в таблицу базы есть поле disabled, в котором находится id каррент юзера.

id пользователя лучше передавать в поле hidden, а не disabled
http://htmlbook.ru/html/attr/hidden
"disabled" обычно используется чтобы показать пользователю что там у него написано в форме, без возможности редактирования.... ну или там, допустим, чтобы заставить пользователя поставить галочку "согласен гореть в аду", снимая аттрибут disabled при этом.

4 Отредактировано Ray (2013-04-16 14:33:45)

Re: [РЕШЕНО] Слетает дефолтное значение в форме при отправке формы

"disabled" обычно используется чтобы показать пользователю что там у него написано в форме, без возможности редактирования....

Не согласен - приминительно к symfony ситуация описана не до конца. Если поле является обязательным - показать то оно покажет, а потом вылетит с ошибкой валидации, т.к. disabled поля не передаются. Тогда надо перед сохранением восстанавливать состояние поля. Или как вариант - создавать новый виджет, который бы принимал значение определённого поля и имел ValidatorPass

5

Re: [РЕШЕНО] Слетает дефолтное значение в форме при отправке формы

Hill пишет:

"disabled" обычно используется чтобы показать пользователю что там у него написано в форме

Для этого вообще-то специально существует атрибут поля readonly.

Hill пишет:

чтобы заставить пользователя поставить галочку "согласен гореть в аду", снимая аттрибут disabled при этом

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

Hill пишет:

id пользователя лучше передавать в поле hidden, а не disabled

У меня вообще сомнения, что его надо как-то передавать. Если речь о текущем пользователе, то его идентификатор система и так знает. Это бессмысленное поле, которое придется к тому же проверять на соответствие реальности, иначе подставив там в фаербаге чужой идентификатор, можно подарить кому-то внезапные проблемы.

6

Re: [РЕШЕНО] Слетает дефолтное значение в форме при отправке формы

Спасибо, вопросов не осталось!