Сохранение значения флажка в Yii - PullRequest
14 голосов
/ 02 июня 2011

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

Ответы [ 9 ]

20 голосов
/ 23 октября 2011

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

16 голосов
/ 03 июня 2011

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

6 голосов
/ 30 мая 2013

Пожалуйста, следуйте: 1. в защищенном / 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 голосов
/ 02 июня 2011

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

$model->save();

с

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

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

2 голосов
/ 19 октября 2012

Статья, которая может быть полезна при выяснении, как работать с логическими значениями и флажками в Yii

http://www.larryullman.com/2010/07/25/handling-checkboxes-in-yii-with-non-boolean-values/

1 голос
/ 11 октября 2013

Я использовал поле битового типа в своей БД, и оно не сработало.

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));?> 
0 голосов
/ 29 июля 2014

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

array('active', 'safe'),
0 голосов
/ 05 марта 2014

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

0 голосов
/ 09 августа 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...