Yii的初学者,在GridView中连接了DatePicker,但是当我设置日期时,数据库中没有任何变化,其中有旧值。我不知道该怎么做才能使数据进入数据库。
查看:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
'avito_login',
'avito_password',
'Region',
"City",
"legal_entity",
"manager_contact_phone",
"avito_user_id",
"teg",
[
'label' => 'Date begin subscription',
'value' => function ($model, $key, $value) {
return \kartik\date\DatePicker::widget([
'name' => 'date_subscription',
'model' => $model,
'value' => $model->date_subscription,
'type' => DatePicker::TYPE_INPUT,
'pluginOptions' => [
'format' => 'yyyy-mm-dd',
'autoclose' => true,
],
'pluginEvents'=>[
'changeDate'=>"function(e) {[jQuery.ajax({ url: '/admin/clients/date-subscription', type: 'post', contentType: 'application/x-www-form-urlencoded', dataType: 'html', data: { data: this.value }, success: function (data) { alert(data) });
}",
],
]);
},
'format' => 'raw',
],
?>
控制器
public function actionDateSubscription()
{
$datesubscription = Yii::$app->request->post('date_subscription');
}
什么也没有发生,日期停止的字段处于活动状态
答案 0 :(得分:0)
您基本上需要将ajax调用绑定到datepicker
,这会将date
发送到服务器controller/action
,服务器会将新日期更新到数据库中并将响应发送回前端,如果一切正常,它将刷新gridview以反映新日期。
Here 是一个类似的答案,它使用切换开关来更新数据库status
列,您可以大致了解该过程。
唯一不同的是,您必须使用pluginEvents
选项来指定changeDate
事件,并将ajax调用绑定到该事件,如下所示
[
'label' => 'Date begin subscription',
'value' => function ($model, $key, $value) {
return \kartik\date\DatePicker::widget([
'name' => 'date_subscription',
'model' => $model,
'value' => $model->date_subscription,
'type' => DatePicker::TYPE_INPUT,
'pluginOptions' => [
'format' => 'yyyy-mm-dd',
'autoclose' => true,
],
'pluginEvents'=>[
'changeDate'=>"function(e) { //call your ajax fuction here }",
]
]);
},
'format' => 'raw',
],
请注意:如果您已将date_subscription
设为空/空,请确保同时在clearDate
事件中调用ajax和changeDate
。
有关事件的完整列表,请参见DOCS