Сохранение значения флажка в Yii

Я не могу понять, как правильно сохранить значения флажка в 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 не сохраняется. Где я ошибаюсь?

Ответы

Ответ 1

Для каждого входа, который вы принимаете от пользователя, вам нужно определить его в model:: rule(). активно определено там в правиле()?

Ответ 2

Вы можете использовать массив 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)

Ответ 3

В общем, если у вас возникли проблемы с сохранением базы данных, я бы заменил

$model->save();

с

if($model->save() == false) var_dump($model->errors);

Таким образом, вы можете точно понять, почему это не спасло. это обычно ошибка проверки.

Ответ 4

Пожалуйста, следуйте инструкциям:  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'); ?>

Надеюсь, это сработает для вас...

Ответ 6

Я использовал поле бит типа в моей базе данных и не работал.

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));?> 

Ответ 7

Вы можете проверить, распечатав все атрибуты, которые были захвачены. Если активный объект не зафиксирован, он не должен быть безопасным. вам нужно объявить переменную как безопасную или определить правило вокруг этой переменной. Это сделает безопасность безопасной.

Ответ 8

У меня аналогичная аналогичная проблема перед, я изменяю тип данных int, поэтому он сохраняет

Ответ 9

Мы также можем добавить правило как safe в model, чтобы передать значения от form до controller без пропущенных.

array('active', 'safe'),