我使用的是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'小部件选项)实现它以及如何实现? 任何建议都将受到高度赞赏。提前谢谢。
答案 0 :(得分:3)
您应该将pluginEvents
数组与switchChange
事件一起使用,以触发对您的php脚本的ajax调用,该脚本会更新数据库:
pluginEvents = [
"switchChange.bootstrapSwitch" => 'function() {
$.ajax({
method: "POST",
url: "'.Url::to(['/controller/action']).'",
data: { status_11: state}
})
}',
];