2010-05-05 4 views
1

Использование Doctrine в symfony 1.4 У меня есть несколько булевых столбцов, определенных (хранимых как tinyint в mySQL). Виджеты флажков всегда отображаются как проверенные, даже если возвращаемое значение равно «0». Кажется, это связано с this ticket.symfony: логические столбцы не отображают виджеты флажков, как отмечено

Это обычная проблема? Есть ли обходной путь?

я могу заставить его работать, изменяя линию 70 в sfWidgetFormInputCheckbox на:

if (null !== $value && $value !== false && $value !== 0) 

но я предпочел бы не изменять основные Symfony файлы.

+0

Спасибо за этот вопрос поднимался. Я могу подтвердить, что это все еще проблема с 11.2011 года. Похоже, они исправили его в версии 1.4.15, но этого не произошло. http://trac.symfony-project.org/ticket/3996 –

ответ

0

Symfony нерешенной ошибка, см http://www.devexp.eu/2009/04/23/sfwidgetforminputcheckbox-unchecked-bug/

Ваша база данных возвращает 0 для неконтролируемых коробок, но Symfony делает это как проверено.

Вы можете исправить самостоятельно, отредактировав Symfony/Библиотека/виджет/sfwidgetforminputcheckbox.class, строка 70 (в версии 1.4.6), изменения:

if (null !== $value && $value !== false)

в

if (null !== $value && $value !== false && $value != 0)

+0

Для любых будущих читателей этого решения, следует предупредить, вы никогда не должны менять поведение основного класса, иначе при обновлении вы потеряете свои изменения, перейдете к производству и задаетесь вопросом, почему он не ведет себя так, как раньше. –

0

Не знаете, в каком контексте вы видите проблему. Я могу получить следующее, чтобы нормально работать:

$database_field = '1;0;1;0;1;0;1'; 
$checked = explode(';', $database_field); 
$this->form->getWidget('a_set_of_checkboxes')->setDefault($checked); 

... чекбокс с 1 проверяется, 0 нет.

Я использую виджеты «sfWidgetFormChoice» с атрибутами «multiple: true» и «extended: true», поэтому они не являются отдельными виджетами флажков, а представляют собой один виджет, содержащий массив флажков/значений.

+0

Мой класс виджета - это sfWidgetFormInputCheckbox, потому что это всего лишь одно поле. – gruner

2

Еще один способ разрешить эту ошибку без изменения классов Symfony - установить значение по умолчанию для поля в базе данных равным 0 (непроверено):

chk_field: { type: boolean, default: 0 } 

И в наборе виджет в Form.class следующим образом:

$this->setDefault('chk_field', $this->getOption('default')); 

Это должно показать «» chk_field поле как «бесконтрольно» в вашей форме

+2

Я изменил его на значение по умолчанию: null и работал без опции setDefault. –

Смежные вопросы