CakePHP form helper - изменить значение скрытого ввода для флажка / радио - PullRequest
2 голосов
/ 18 марта 2011

Использование помощника по формам CakePHP для создания флажка достаточно просто;использовать пример из документации:

    echo $this->Form->checkbox('done',array('value' => 555));

Это создаст следующий HTML:

<input type="hidden" name="data[User][done]" value="0" id="UserDone_" />
<input type="checkbox" name="data[User][done]" value="555" id="UserDone" />

Это все хорошо, и скрытое поле служит для принудительной отправкизначение для поля «done», даже если поле не отмечено.

Теперь, в качестве аргумента, допустим, определение базы данных этого поля равно ENUM('yes','no').Конечно, я могу легко изменить значение флажка на «да».Однако, если он не отмечен, значение «0» передается из скрытого элемента.Это не приводит к ошибке или предупреждению из mysql, так как 0 всегда является допустимым значением для поля enum;это выглядит как пустая строка.

Могу ли я изменить значение скрытого поля, которое генерирует CakePHP (на «нет»), или мне нужно подавить автогенерацию и создать скрытое поле самостоятельно?(Раздражение растет с ростом числа флажков.)

Я считаю, что все это относится и к группам переключателей - по крайней мере, если у них нет выбора по умолчанию.

I 'м с использованием CakePHP 1.3.Спасибо.

Ответы [ 3 ]

5 голосов
/ 18 марта 2011

Кроме того, вы должны помнить, что CakePHP не поддерживает перечисления (и я уверен, что такой сценарий является одной из причин)

Если ваши полевые данные действительно двоичные (да / нет, true / false разрешено / отключено и т. Д.), То для соглашений CakePHP вы должны просто использовать поле int (1) или tinyint (1) и затем преобразовать логическое значение значение да / нет и т. д. в представлении.

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

Другой вариант - переопределить метод флажка form-> helper, который вызывается при вызове form-> input, чтобы принять новый ключ в массиве параметров, который устанавливает значение, отличное от 0 / false.

5 голосов
/ 01 ноября 2012

С FormHelper::checkbox вы можете использовать hiddenField для установки значения по умолчанию.

<?php echo $this->Form->checkbox('done', array('value'=>'yes', 'hiddenField'=>'no');?>

С FormHelper::radio вы можете установить значение по умолчанию для одного из параметров, только если значения совпадают. Это также подавит скрытое поле.

<?php echo $this->Form->radio('done', array('yes' => __('Yes')), 'no' => __('No'), array('value'=>'no');?>
3 голосов
/ 18 марта 2011

К сожалению, FormHelper::checkbox позволяет отключить скрытый элемент, но не выбирать его значение, поэтому вам нужно будет сделать это и создать скрытое поле самостоятельно.Например:

<?php echo $this->Form->hidden('done',array('value'=>'no'))?>
<?php echo $this->Form->checkbox('done',array('value'=>'yes','hiddenField'=>false))?>
...