Symfony всегда сохраняет флажки как ноль - PullRequest
0 голосов
/ 09 января 2012

В Symfony 1.4.11 у меня есть логическое поле, которое устанавливается в форме с помощью флажка HTML. Когда значение равно 0 (не отмечено), HTML-код флажка равен

<input type="checkbox" value="" name="gift_type[valid]">

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

Код, который я использую для этого флажка, генерируется генератором администратора Symfony, поэтому я подумал, что он будет работать "из коробки". Если я уберу галочку с истинного значения, оно будет работать, как и ожидалось.

schema.yml

GiftType:
  columns:
    valid: { type: boolean, notnull: true, default: true }

BaseGiftTypeForm.class.php

$this->setWidgets(array(
    'valid' => new sfWidgetFormInputCheckbox()
));
$this->setValidators(array(
    'valid' => new sfValidatorBoolean(array('required' => false))
));

Ответы [ 3 ]

0 голосов
/ 09 января 2012

Попробуйте изменить тип данных на tinyint.

valid: { phpName: Valid, type: TINYINT, size: '4', required: false }

Вот флажок со значением по умолчанию и меткой.

$this->setWidgets(array(
'valid' => new sfWidgetFormInputCheckbox(array('label'=>'My Label') , array('value' => '1'));
0 голосов
/ 09 января 2012

Ваш HTML-флажок выглядит забавно, Вы уверены, что это было сгенерировано Symfony? (идентификатор отсутствует, т. е.)

<input type="checkbox" name="gift_type[valid]" checked="checked" id="gift_type_valid" />

В любом случае, весь код, который вы показываете, в порядке, нет необходимости менять тип схемы! (ping @richrosa). sfValidatorBoolean возвращает логическое значение, затем оно передается объекту, а затем объект сохраняется. Вы должны отладить свою модель. Из коробки логическое поле в Doctrine Admin Generator работает отлично.

Вы можете добавить этот код в свой класс GiftTypeForm, чтобы помочь отладке:

  protected function doUpdateObject($values)
  {
    var_dump($values);die();
    $this->getObject()->fromArray($values);
  }

Если вы не видите «действительный» ключ логический, возникает ошибка процесса проверки, если она здесь, у вас проблема с моделью (перезаписали ли вы метод сохранения?).

0 голосов
/ 09 января 2012

Я не знаю, как работает Symfony. В простом PHP / HTML значение флажка не зависит от того, установлен он или нет. Если флажок установлен, его значение будет отправлено в форме сообщения; если он не отмечен, он не будет отправлен.

...