【发布时间】:2014-11-29 22:35:46
【问题描述】:
我在http://webtips.krajee.com/setup-editable-column-grid-view-manipulate-records/http://webtips.krajee.com/setup-editable-column-grid-view-manipulate-records/ 关注了关于在网格中设置可编辑字段的帖子
似乎一切正常 - 我单击该字段,更改它的值并在网格中显示更新后的值。但是 - 下次我刷新时,该值会恢复为原始值。
我做了一点调试,看起来控制器中的保存失败了。
我的表有两个关键字段(key1 和 key2)和一个值字段。我正在尝试更新此值字段。
我的视图代码如下:
$gridColumns = [
'AnotherField',
[
'class' => 'kartik\grid\EditableColumn',
'attribute'=>'value',
'label' => 'some value',
'editableOptions'=> [
'header' => 'profile',
'format' => Editable::FORMAT_BUTTON,
]
];
...
...
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => $gridColumns
]) ?>
控制器代码如下:
<snip>
//default code from gii-generated controller
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
// orig post said to use this: $dataProvider = $searchModel->search(Yii::$app->request->getQueryParams());
// Validate if there is an editable input saved via AJAX
if (Yii::$app->request->post('hasEditable')) {
$model = new MyTable;
$post = [];
$posted = current($_POST['MyTable']);
$post['MyTable'] = $posted;
// Load model like any single model validation
if ($model->load($post)) {
// When doing $result = $model->save(); I get a return value of false
$model->save();
$out = Json::encode(['output'=>$output, 'message'=>'']);
}
// Return AJAX JSON encoded response and exit
echo $out;
return;
}
// Non-AJAX - render the grid by default
</snip>
控制器如何知道要更新哪条记录,因为我只传入“值”字段,而不是键?
我是否需要以某种方式将这些 key1 和 key2 字段添加到可编辑小部件中的视图中,以便将这些值传递给控制器(以便加载和保存知道要更新哪个记录)或者是否有其他方法控制器处理这个?
【问题讨论】: