在Yii2中以窗体过滤gridview

时间:2016-10-13 21:33:14

标签: yii2

我想在表单中使用gridview。我们的想法是将gridview中的多个选定行插入表中。我设法在表格中获得了gridview。但是当我过滤它时,它正在运行insert命令而不是过滤。

另外,如果有更好的方法,请告诉我。 我的_form的代码

public function actionCreate()
    {
        $model = new Rawmaterial();
        $searchModel2 = new RmtemplateSearch();
        $dataProvider2 = $searchModel2->search(Yii::$app->request->queryParams);

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
                'searchModel2' => $searchModel2,
                'dataProvider2' => $dataProvider2,
            ]);
        }
    }

控制器操作代码

<?php

use yii\helpers\Html;


/* @var $this yii\web\View */
/* @var $model frontend\models\Rawmaterial */

$this->title = 'New Charge';
$this->params['breadcrumbs'][] = ['label' => 'Rawmaterials', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="rawmaterial-create">

    <h1><?= Html::encode($this->title) ?></h1>

    <?= $this->render('_form', [
        'model' => $model,
        'searchModel2' => $searchModel2,
        'dataProvider2' => $dataProvider2,
    ]) ?>

</div>

create.php代码

public function actionCreate()
    {
        $model = new Rawmaterial();
        $searchModel2 = new RmtemplateSearch();
        $dataProvider2 = $searchModel2->search(Yii::$app->request->queryParams);

        if ($_POST('submit')  == 'create_update' )  {
        // then perform the insert 
            if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
            } else {
                return $this->render('create', [
                    'model' => $model,
                    'searchModel2' => $searchModel2,
                    'dataProvider2' => $dataProvider2,
                ]);
            }
        }  else {
             // no insert  but render for filter ..
            return $this->render('create', [
                    'model' => $model,
                    'searchModel2' => $searchModel2,
                    'dataProvider2' => $dataProvider2,
                ]);
        }

    }

错误 - enter image description here

更新 在ScaiseEdge的回答中,我已经更新了_form,Controller的操作如下所示。

public function actionCreate()
    {
        $model = new Rawmaterial();
        $searchModel2 = new RmtemplateSearch();
        $dataProvider2 = $searchModel2->search(Yii::$app->request->queryParams);

        if (!$request->isAjax) { 

        if ($_POST('submit')  == 'create_update' )  {
        // then perform the insert 
            if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
            } else {
                return $this->render('create', [
                    'model' => $model,
                    'searchModel2' => $searchModel2,
                    'dataProvider2' => $dataProvider2,
                ]);
            }
        }
        }  else {
             // no insert  but render for filter ..
            return $this->render('create', [
                    'model' => $model,
                    'searchModel2' => $searchModel2,
                    'dataProvider2' => $dataProvider2,
                ]);
        }

    }

错误: enter image description here

更新2

public function actionCreate()
    {
        $model = new Rawmaterial();
        $searchModel2 = new RmtemplateSearch();
        $dataProvider2 = $searchModel2->search(Yii::$app->request->queryParams);

        if (isset($_POST('submit'))) { 

        if ($_POST('submit')  == 'create_update' )  {
        // then perform the insert 
            if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
            } else {
                return $this->render('create', [
                    'model' => $model,
                    'searchModel2' => $searchModel2,
                    'dataProvider2' => $dataProvider2,
                ]);
            }
        }
        }  else {
             // no insert  but render for filter ..
            return $this->render('create', [
                    'model' => $model,
                    'searchModel2' => $searchModel2,
                    'dataProvider2' => $dataProvider2,
                ]);
        }

    }

错误 enter image description here

更新3

public function actionCreate()
    {
        $model = new Rawmaterial();
        $searchModel2 = new RmtemplateSearch();
        $dataProvider2 = $searchModel2->search(Yii::$app->request->queryParams);

        if (isset($_POST['submit'])) { 

            if ($_POST('submit')  == 'create_update' )  {
            // then perform the insert 
                if ($model->load(Yii::$app->request->post()) && $model->save()) {
                return $this->redirect(['view', 'id' => $model->id]);
                } else {
                    return $this->render('create', [
                        'model' => $model,
                        'searchModel2' => $searchModel2,
                        'dataProvider2' => $dataProvider2,
                    ]);
                }
            }
            }  else {
                 // no insert  but render for filter ..
                return $this->render('create', [
                        'model' => $model,
                        'searchModel2' => $searchModel2,
                        'dataProvider2' => $dataProvider2,
                    ]);
            }


    }

错误 enter image description here 更新4

{Binding ...}

enter image description here

1 个答案:

答案 0 :(得分:1)

这可能与提交过滤值以执行搜索的事实有关 您可以覆盖此行为,向提交按钮添加值

<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', 
      ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary',
    'name' => 'submit', 'value' => 'create_update']) ?>

并在控制器/操作(插入和更新)中检查提交按钮的内容

if (isset($_POST['submit'])) { 

    if ($_POST['submit']  == 'create_update' )  {
          // then perform the insert 
      }   else {
         // no insert  but render for filter ..
}