Задать вопрос

Как сделать модальное окно для редактирования элементов GridView?

Основа сгенерирована в 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 на обновление заданного элемента, а не на создание нового.
  • Вопрос задан
  • 387 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@iSensetivity
бухгалтер, програміст-самоук
1. Навешать на кнопку ajax запрос.
2. создать метод для отдачи html-кода з загруженньіми в него данньіми с модели.
3. создать метод для сохранения.
4. Profit!!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы