Отображение значения виджета по умолчанию, только если значение объекта не установлено (в режиме NEW) - PullRequest
0 голосов
/ 14 июля 2010
THIS QUESTION IS NOT ABOUT HOW TO SET DEFAULT VALUE OF A WIDGET

Привет, Symfonians! У меня были фундаментальные сомнения по поводу форм, я выкладываю 2 сценария ниже.

У меня есть customModelForm, которая расширяет modelForm. 1> Если я не укажу значение по умолчанию для поля формы новый: поле пустое edit: поле показывает значение в объекте 2> Если я укажу значение по умолчанию для поля, новое: поле показывает значение по умолчанию редактировать: поле показывает значение по умолчанию

Я пытаюсь избежать поведения режима РЕДАКТИРОВАНИЯ в сценарии 2. Значение по умолчанию должно отображаться только в том случае, если значение в объекте не установлено.

Я звоню parent :: configure после установки значения по умолчанию. Имеем ли мы какой-либо контроль над событием 'bind'?

Спасибо

Ответы [ 2 ]

1 голос
/ 15 июля 2010

Этого не должно быть, по крайней мере, в Учении. Часть кода, где это происходит, находится в updateDefaultsFromObject в sfFormDoctrine. Соответствующие строки:

if ($this->isNew())
{
  $defaults = $defaults + $this->getObject()->toArray(false);
}
else
{
  $defaults = $this->getObject()->toArray(false) + $defaults;
}

updateDefaultsFromObject вызывается net, пока не будет завершена вся цепочка конфигурирования, поэтому здесь должно происходить что-то еще.

Вы используете Doctrine? Используете ли вы самую последнюю версию Symfony (здесь недавно была ошибка)? Вы уверены, что по умолчанию устанавливается в configure методе вашей формы?

Рекомендуется избегать проверки isNew. Здесь возникает более серьезная проблема, поскольку правильное поведение заключается в том, что значение по умолчанию перезаписывается значениями существующего объекта.

1 голос
/ 14 июля 2010

Прежде всего, вызовите parent::configure() первым в вашем configure() методе.Таким образом, вы не рискуете перезаписать свою конфигурацию родительской конфигурацией.

Вы можете установить значения по умолчанию на основе состояния модели, выполнив что-то вроде следующего в вашем configure() методе:

if ($this->getObject()->isNew())
{
  // do something here but only if the object is new
}
else
{
  // the object is being edited
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...