Основа сгенерирована в CRUD.
На данный момент имеется:
- Файл _form.php в котором описано модальное окно
- Контроллер слегка видоизмененный для открытия модали создания нового элемента
- GridView обернутый в Pjax
Внесенные изменения в контроллер:
- ActionCreate перенесен в ActionIndex
public function actionIndex() {
$searchModel = new ContactsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
/**
* Creates a new Contacts model.
* If creation is successful, the browser will be redirected to the 'view' page.
* @return mixed
*/
$model = new Contacts();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'model' => $model,
]);
}
Прошу ногами не пинать, только начал изучать Yii2.
UPD:
Создан файл _update.php в котором описано модальное окно для обновления элемента.
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\bootstrap\Modal;
/* @var $this yii\web\View */
/* @var $model backend\models\Contacts */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="contacts-form">
<?php Modal::begin([
'header' => 'Обновление контакта: '.$model->name,
]);
$form = ActiveForm::begin();
?>
<?= $form->field($model, 'name')->textInput(['maxlength' => true, 'id'=> 'nameUpdate']) ?>
<?= $form->field($model, 'email')->textInput(['maxlength' => true, 'id'=> 'emailUpdate']) ?>
<?= $form->field($model, 'subject')->textInput(['maxlength' => true, 'id'=> 'subjectUpdate']) ?>
<?= $form->field($model, 'body')->textInput(['maxlength' => true, 'id'=> 'bodyUpdate']) ?>
<div class="form-group">
<?= Html::submitButton('Обновить', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
<?php Modal::end(); ?>
</div>
Переписан controller\ActionUpdate
public function actionUpdate() {
if (Yii::$app->request->isAjax) {
$id = Yii::$app->request->post('id');
$user = $this->findModel($id);
$userArray = [
'name' => $user->name,
'email' => $user->email,
'subject' => $user->subject,
'body' => $user->body,
];
echo json_encode($userArray);
}
}
К этому всему естественно написан Ajax запрос, а также обновление значений инпутов на те, что были запрошены у контроллера.
НО! Вся проблема в том, что при рендере contacts/index, передается параметр $model, изначально заданный на добавление нового элемента, соответственно при вызове модали элемент не обновляется, а создается новый.
Вопрос: как переопределить $model на обновление заданного элемента, а не на создание нового.