Yii2 - GridView中的Kartik / EditableColumn不保存值

时间:2018-03-09 23:31:53

标签: arrays json yii2 kartik-v

我在使用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是我的模特。

请帮忙。

1 个答案:

答案 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' ])
        ]
    ] ,
] ,

希望它可以帮助你。