Yii2 - 单击switchinput小部件时更新数据库字段

时间:2017-03-28 08:28:26

标签: yii2

我使用的是switchinput Kartik小部件,它与数据库的真/假字段(field1)有关。我想要做的是能够在更改开关时更新此数据库字段值。

以下是视图代码:

<?php 
    echo $form->field($model, 'field1')->widget(SwitchInput::classname(), [
    'type' => SwitchInput::CHECKBOX,
    'name' => 'status_11',
    'pluginOptions' => [
        'size' => 'medium',
        'onColor' => 'success',
        'offColor' => 'danger',
        'handleWidth'=>80,
        'onText'=>'ACTIVE',
        'offText'=>'INACTIVE'
    ]
        ]);
?>

以下是尝试更新数据库的控制器代码:

.................    
if (isset($_POST['status_11']))
                    {
                        if ($model->field1 == False)
                        {
                            $model->field1 = True;
                        }
                        else
                        {
                            $model->field1 = False;
                        }
                    }
                    if(!$model->save())
                    {
                        throw new Exception('Could not save to database. Trnasaction aborted.');
                    }
..................

交换机可以从数据库中读取field1的值并分别显示为on或off。但是更改(onclick)操作不会更新数据库...

我应该尝试使用PHP还是应该使用js('pluginEvents'小部件选项)实现它以及如何实现? 任何建议都将受到高度赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:3)

您应该将pluginEvents数组与switchChange事件一起使用,以触发对您的php脚本的ajax调用,该脚本会更新数据库:

pluginEvents = [
    "switchChange.bootstrapSwitch" => 'function() { 
        $.ajax({
          method: "POST",
          url: "'.Url::to(['/controller/action']).'",
          data: { status_11: state}
      })
    }',
];