我在使用Yii2中的EditableColumn时遇到问题,它没有保存更改的值, 在我的GridView索引中,我有以下内容:
[
'class'=>'kartik\grid\EditableColumn',
'attribute'=>'nombreDestino',
'editableOptions' => [
'inputType' => Editable::INPUT_DROPDOWN_LIST,
'data'=> $claveCliente,
'formOptions' => [
'action' => \yii\helpers\Url::to(['pru',
['id'=>$idOrigen,'idD'=>$idDestino]])
]
],
在我的控制器中我有以下内容:
public function actionPru()
{
$val = implode(",",$_GET[1]['id']);
$val2 = implode(",",$_GET[1]['idD']);
if(Yii::$app->request->post('hasEditable'))
{
$nombreDestino = Yii::$app->request->post('editableKey');
$Destino = RelClientes::findOne($nombreDestino);
$out = Json::encode(['output'=>'','message'=>'']);
$post = [];
$posted = current($_POST['RelClientes']);
if($Destino->load($posted))
{
$Destino -> save(false);
}
echo $out;
return;
}
}
JSON返回为空,在进行更改并单击保存按钮时,如果我进行更改,则在GridView中但是在重新加载页面时,不会保存更改。
RelClientes是我的模特。
请帮忙。
答案 0 :(得分:0)
确保您使用的是Kartik\grid\Gridview
,而不是yii\grid\GridView
。您应该查看DOCS
的EditableColumnAction来配置更新操作,而不需要传递任何id
。
处理可编辑数据
除了将通过表单POST操作,可编辑列返回的可编辑输入值 自动存储以下隐藏输入,以便通过检索 你的控制器动作: -
editableIndex
可编辑数据所属的网格行索引。
editableKey
可编辑数据所属的网格主键。如果网格的数据具有数字或主键 字符串,然后它将按原样返回。但是,如果网格数据有 复合主键(数组)或对象作为键(在中使用) mongo db),那么这将返回一个PHP序列化字符串,即可 使用PHP unserialize method
解析。
因此,请使用控制器中的以下功能替换您的操作
public function actions() {
return yii\helpers\ArrayHelper::merge ( parent::actions () , [
'pru' => [
'class' => kartik\grid\EditableColumnAction::class ,
'modelClass' => RelClientes::class ,
'outputValue' => function ($model , $attribute , $key , $index) {
return $model->$attribute;
} ,
'outputMessage' => function($model , $attribute , $key , $index) {
return '';
} ,
]
]);
}
并将您的EditableColumn
定义更新为以下
[
'class' => kartik\grid\EditableColumn::class ,
'attribute' => 'name' ,
'editableOptions' => [
'inputType' => Editable::INPUT_DROPDOWN_LIST ,
'data'=> $claveCliente,
'formOptions' => [
'action' => \yii\helpers\Url::to([ 'pru' ])
]
] ,
] ,
希望它可以帮助你。