Я установил редактируемый столбец для GridView в Yii2 с расширением Kartik Editable. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти способ обновить несколько элементов таблицы из одного редактируемого столбца. То, что я сделал: столбец GridView
[
'class' => 'kartik\grid\EditableColumn',
'attribute'=>'post_title',
'editableOptions'=> function ($model, $key, $index) {
return [
'inputType' => \kartik\editable\Editable::INPUT_TEXT,
'size'=>'sm',
'afterInput'=>function ($form, $widget) use ($model, $index) {
return $form->field($model, 'post_description')->textInput(['placeholder'=>'Enter post title']);
}
];
}
],
Нажимая править столбец заголовка сообщения, он показывает поля редактирования для названия и описания
Действия PostsController
public function actionIndex()
{
$searchModel = new PostsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
if (Yii::$app->request->post('hasEditable')) {
$postId = Yii::$app->request->post('editableKey');
$model = Posts::findOne($postId);
$out = Json::encode(['output'=>'', 'message'=>'']);
$post = [];
$posted = current($_POST['Posts']);
$post['Posts'] = $posted;
if ($model->load($post)) {
$output = '';
$out = Json::encode(['output'=>$output, 'message'=>'']);
$model->save();
}
echo $out;
return;
}
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
Таким образом, когда я редактирую заголовок и описание публикации, только запись заголовка сохраняется в базе данных. Я думаю, это потому, что ток сохраняет только одно значение
$posted = current($_POST['Posts']);
Каким образом можно сохранить как $model-> post_title, так и $model-> post_description?
Это редактируемый столбец Ajax. В то время на контроллер будет отправлено только одно значение.
Поэтому класс post_title
и post_description
должен быть доступен для редактирования в представлении.
Это должно работать каждый раз, когда вы редактируете эти столбцы.
Также измените это
if ($model->load($post)) {
if (isset($model->post_title)){
// here you can format the value of the attribute
and display on the screen
$output = $model->post_title;
}
if (isset($model->post_description)){
$output = $model->post_description;
}
$model->save();
// Here you send a message that the value has been saved
$out = Json::encode(['output'=>$output, 'message'=>'Saved']);
}