Yii2在同一页面上重定向,用户输入数据

时间:2016-08-22 06:12:14

标签: php redirect yii2 yii2-advanced-app

我正在使用Yii2-advanced-app。我对像这样的弹出窗体采取了一些操作 - Pop-up action

当我们点击弹出窗口中的“创建”按钮时,它会创建一些记录&将我们重定向到同一页面,即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,
      ]);
  }
}

在这里,我再次在创建表单/页面上重定向页面。没关系。但是当用户填写整个表格时然后他想“添加项目”,他点击添加按钮&在弹出窗口中创建它。但是在提交弹出窗体后,创建页面上的所有字段都会被清除,这是他最近填写的(因为我们重定向它)。 我需要在提交弹出窗口后不应刷新/重定向页面的场景,它应保留在同一页面上,以便用户输入的数据在页面上保持安全。 / EM> 因此,在创建一个项目后,他将获得这样的创建页面 - filled create form

1 个答案:

答案 0 :(得分:0)

我是这样做的 (所有新建议也欢迎) -

添加项目弹出窗口 -

<?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>

我的选择列表&amp;实际创建表单上的“添加(+)”按钮 -

<?= $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
      ]);
  }
}