Yii2 Перенаправление на той же странице с данными, введенными пользователем

Я использую Yii2-Advanced-приложение. Я предпринял некоторые действия с такими всплывающими формами - Всплывающее действие

Когда мы нажимаем кнопку "Создать" во всплывающем окне, он создает некоторую запись и перенаправляет нас на ту же страницу, то есть localhost/abcd/backend/web/index.php? R =xyz/create. Вот код, который я написал для этого -

public function actionCreateitem()
{
  $model = new Items();

  if ($model->load(Yii::$app->request->post()) && $model->save()) {
    return $this->redirect(['create', 'id' => $_SESSION['ro_id']]);
  } else {
    return $this->renderAjax('itemform', [
      'model' => $model,
      ]);
  }
}

Здесь я перенаправил страницу на создание формы / страницы снова. Это нормально. Но когда пользователь заполняет всю форму и затем хочет "добавить элемент", он нажимает кнопку "Добавить" и создает ее во всплывающем окне. Но после отправки всплывающей формы все поля на странице создания очищаются, которые он недавно заполнил (потому что мы перенаправили ее). Мне нужен сценарий, в котором страница не должна обновляться / перенаправляться после отправки всплывающего окна, она должна оставаться на той же странице, чтобы данные, введенные пользователем, оставались в безопасности на странице. Итак, после создания предмета он получит страницу создания примерно так: заполнить создать форму

1 ответ

Я сделал это так (все новые предложения также приветствуются)-

добавить всплывающее окно

<?php
$this->registerJs("$('#createitem').click(function() {
    var itemName = $('#items-item_name').val();
    var sku = $('#compitems-sku').val();
    var itemDesc = $('#items-item_description').val();
    $('#modalItem .close').click();
    $.get('?r=xyz/createitem&itemName='+itemName+'&sku='+sku+'&itemDesc='+itemDesc, function(success){
        $('.refreshitem').html(success);
    });
});");
?>
<div class="items-form">

    <?php $form = ActiveForm::begin(); ?>

    <?= $form->field($model, 'item_name')->textInput(['maxlength' => true]) ?>

    <?= $form->field($modelCI, 'SKU')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'item_description')->textArea(['rows' => 5]) ?>

    <div class="form-group"><p align="right">
        <button id="createitem" type="button" class="btn btn-success">Create</button></p>
    </div>

    <?php ActiveForm::end(); ?>

</div>

Мой список выбора и кнопка "Добавить (+)" на фактическую форму создания -

<?= $form->field($model, "[{$i}]item_id")->dropDownList(ArrayHelper::map(Items::find()->where(['deleted' => 'N'])->all(),'id','item_name'),['prompt'=>'Select Item', 'class' => 'form-control refreshitem']) ?>
<button id="modalButtonItem" class="btn btn-default" type="button" value="?r=xyz/createitem&itemName=0&sku=0&itemDesc=0" onclick="itemModal(1);">+</button>

метод контроллера-

public function actionCreateitem($itemName, $sku, $itemDesc)
{
  $model = new Items();
  $modelCI = new CompItems();
  if ($itemName != '0' && $sku != '0' && $itemDesc != '0') {
    $itemExist = Items::find()->select('id')->where(['item_name' => $itemName])->one();
    if(count($itemExist) == 0) {
      $model->item_name = isset($itemName) ? $itemName : 'NULL';
      $model->item_description = !empty($itemDesc) ? $itemDesc : $itemName;
      $model->save();
    }

    $items = Items::find()->where(['deleted' => 'N'])->all();
    foreach ($items as $item) {
      echo '<option value="'.$item->id.'">'.$item->item_name.'</option>';
    }
  } else {
    return $this->renderAjax('itemform', [
      'model' => $model, 'modelCI' => $modelCI
      ]);
  }
}
Другие вопросы по тегам