Форма Symfony не соблюдает заданные по умолчанию - PullRequest
3 голосов
/ 24 февраля 2012

У меня довольно простая форма с некоторыми полями из модели доктрины.

$this->widgetSchema['fields'] = new sfWidgetFormDoctrineChoice(array(
  'model'          => 'FieldModel',
  'expanded'       => true,
  'multiple'       => true,));

$this->validatorSchema['fields'] = new sfValidatorDoctrineChoice(array(
  'model'    => 'FieldModel',
  'multiple' => true,));

Поля отображаются в форме как флажки, и я могу проверить и сохранить правильно. Это поле 'fields' преобразуется в json-структуру и сохраняется в базе данных в виде текста. Пока все хорошо.

ПРИМЕЧАНИЕ. Поле 'fields' хранится в базе данных как TEXT, но пользователь должен иметь возможность выбирать значения из списка флажков.

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

Я пытался сделать:

$this->setDefault('fields', array('key1','key2','key3'));

Где 'keyX' соответствует фактическому значению первичного ключа (строки) для поля в базе данных.

Если я сделаю

$this->getDefault('fields');

Я получаю именно то, что положил ранее.

Однако symfony не выводит ни один из флажков, как отмечено. Я даже пытался удалить оба варианта: «расширенный» и «множественный» для виджета выбора, поэтому я получаю простое окно SELECT и предоставляю только одно значение по умолчанию.

Настройка значений по умолчанию для других виджетов (ввод текста, выбор и т. Д.) Работает.

Btw; Полевая модель i18n. Не знаю, имеет ли это здесь значение, так как хранение и извлечение работает, как и ожидалось.

Также; форма отображается как часть другой формы с помощью include_partial (). Может ли это что-нибудь саботировать? В классе родительской формы:

$this->embedRelation('TheRelationThatBugsMe');

А затем в _form.php для 'parent':

include_partial('the_relation_that_bugs_me/form', array('form' => $form['TheRelationThatBugsMe']));

Кто-нибудь знает, где я мог ошибиться, или, по крайней мере, может дать мне несколько советов относительно того, где я должен начать копать?

[UPDATE]

Если я создаю новое поле в форме 'fields2' (которое не существует как поле в базе данных) и использую точно такой же код для создания виджета, валидатора и установки значений по умолчанию, тогда значения по умолчанию отображаются правильно. Почему это не работает установка значений по умолчанию для поля, сопоставленного столбцу в базе данных?

1 Ответ

3 голосов
/ 24 февраля 2012

Если вы вызываете setDefault до того, как updateDefaultFromObject будет вызван в sfDoctrineForm, тогда значения объекта переопределят значения по умолчанию формы, если объект существует.updateDefaultsFromObject содержит соответствующую логику.Вам придется позвонить setDefault позже или переопределить метод.

...