Ответ 1
Для каждого входа, который вы принимаете от пользователя, вам нужно определить его в model:: rule(). активно определено там в правиле()?
Я не могу понять, как правильно сохранить значения флажка в Yii. У меня есть столбец MySQL, active
, определенный как tinyint
. У меня есть следующий код создания формы, который правильно показывает флажок, как отмечено, если значение равно 1 и не отмечено, если 0:
<?php echo $form->labelEx($model,'active'); ?>
<?php echo $form->checkBox($model,'active'); ?>
<?php echo $form->error($model,'active'); ?>
И код для сохранения формы корректно меняет другие текстовые значения:
public function actionUpdate($id)
{
$model=$this->loadModel($id);
if(isset($_POST['Thing']))
{
$model->attributes=$_POST['Thing'];
if($model->save())
$this->redirect(array('thing/index'));
}
$this->render('update',array(
'model'=>$model,
));
}
Значение active
не сохраняется. Где я ошибаюсь?
Для каждого входа, который вы принимаете от пользователя, вам нужно определить его в model:: rule(). активно определено там в правиле()?
Вы можете использовать массив htmlOptions для указания атрибута value. Ниже приведен пример кода:
<?php echo $form->labelEx($model,'active'); ?>
<?php echo $form->checkBox($model,'active', array('value'=>1, 'uncheckValue'=>0)); ?>
<?php echo $form->error($model,'active'); ?>
Начиная с версии 1.0.2, специальная опция с именем "uncheckValue" которые можно использовать для указания значения, возвращаемого, когда флажок не установлен. По умолчанию это значение равно "0". (Этот текст взят из документального документа YII)
В общем, если у вас возникли проблемы с сохранением базы данных, я бы заменил
$model->save();
с
if($model->save() == false) var_dump($model->errors);
Таким образом, вы можете точно понять, почему это не спасло. это обычно ошибка проверки.
Пожалуйста, следуйте инструкциям: 1. в protected/models/Thing.php добавить активный как числовой
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('active', 'numerical', 'integerOnly'=>true),
//OR optional
array('active', 'safe'),
);
}
Действие контроллера: ОК
Вид:
<?php echo $form->labelEx($model,'active'); ?>
<?php echo $form->checkBox($model,'active', array('value'=>1, 'uncheckValue'=>0)); ?>
<?php echo $form->error($model,'active'); ?>
Надеюсь, это сработает для вас...
Статья, которая может быть полезна при определении того, как обрабатывать булевы и флажки в Yii
http://www.larryullman.com/2010/07/25/handling-checkboxes-in-yii-with-non-boolean-values/
Я использовал поле бит типа в моей базе данных и не работал.
1.- I changed the field type to tinyint
2.- In the rules function added:
array('active','numerical'),
3.-In the form (as D3K said) do:
<?echo $form->checkBox($model,'active',array('value'=>1, 'uncheckValue'=>0));?>
Вы можете проверить, распечатав все атрибуты, которые были захвачены. Если активный объект не зафиксирован, он не должен быть безопасным. вам нужно объявить переменную как безопасную или определить правило вокруг этой переменной. Это сделает безопасность безопасной.
У меня аналогичная аналогичная проблема перед, я изменяю тип данных int, поэтому он сохраняет
Мы также можем добавить правило как safe
в model
, чтобы передать значения от form
до controller
без пропущенных.
array('active', 'safe'),