Подзапутался с update form with ajax, помогите, пожалуйста, разобраться.
На странице есть кнопка, которая по ajax шлёт id модели с контроллер.
В контроллере выбирается сама модель и дальше ею надо обновить ActiveForm, которая находится в модальном окне.
Модальное окно отрисовано во view и загружается при загрузке страницы.
Не могу понять, как подменить $model в модальном окне на новую, которую я получил в контроллере?
View:
Код: Выделить всё
<?php
Modal::begin([
'id' => $model->modalID,
'header' => Html::button('Изменить настройки', ['class' => 'btn btn-success', 'id' => 'modalupdateButton']),
]);
?>
<?php echo $this->render('/config/_form', ['model' => $model]); ?>
<?php
Modal::end();
?>
Код: Выделить всё
<div class="config-form">
<?php
$form = ActiveForm::begin(['id' => 'createform', 'enableAjaxValidation' => true,
'options' => [
'enctype' => 'multipart/form-data',
'class' => 'form-horizontal',
],]);
?>
<?php if (!$model->isNewRecord) { $form->field($model, 'id')->hiddenInput(); } ?>
<?= $form->field($model, 'pname')->textInput(['maxlength' => true]) ?>
<div class="row">
<div class="col-sm-8">
<?= $form->field($model, 'mname')->textInput(['maxlength' => true]) ?>
</div>
<div class="col-sm-4">
<?= $form->field($model, 'address')->textInput(['maxlength' => true]) ?>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<?= $form->field($model, 'im')->textInput(['maxlength' => true]) ?>
</div>
<div class="col-sm-6">
<?= $form->field($model, 'ir')->textInput(['maxlength' => true]) ?>
</div>
</div>
<?php ActiveForm::end(); ?>
</div>
Код: Выделить всё
public function actionUpdateModalData(){
if ((Yii::$app->request->post())&&(Yii::$app->request->isAjax)) {
Yii::$app->response->format = yii\web\Response::FORMAT_JSON;
$id = explode('_', Yii::$app->request->post('uploadId'))[0];
$session = Yii::$app->session;
$session->set('uploadId', $id);
if ($id){
$model = Config::find()->where(['user_id' => \Yii::$app->user->identity->id])->andWhere(['id' => $id])->one();
}else{
$model = new Config();
}
$response =
[
'model' => $model,
];
return $response;
}
}