Yii2,GridView,在会话中保存过滤器值

时间:2015-03-25 12:35:39

标签: php session gridview yii2

是否有任何解决方案可以保存过滤器(在会话中),以便用户可以看到"最后使用的过滤器"当他回来的时候?

请在手册或文档或您的代码中进行链接。我没有发现任何搜索这个问题。

5 个答案:

答案 0 :(得分:3)

这有点像黑客,但这会为我保存过滤器,页面和排序。

假设您的模型名为客户

,请将其放入您的控制器中
    $searchModel = new CustomerSearch();

    $params = Yii::$app->request->queryParams;

    if (count($params) <= 1) {
      $params = Yii::$app->session['customerparams'];
      if(isset(Yii::$app->session['customerparams']['page']))
        $_GET['page'] = Yii::$app->session['customerparams']['page'];
      } else {
        Yii::$app->session['customerparams'] = $params;
    }

    $dataProvider = $searchModel->search($params);

答案 1 :(得分:2)

在模型搜索类中,在搜索功能的开头添加以下代码:

if (!isset($params["MyModelSearch"])) {
   if (isset(Yii::$app->session["mymodelsearch"])){
      $params["MyModelSearch"]=Yii::$app->session["mymodelsearch"];
   }
}
else{
   Yii::$app->session["mymodelsearch"]=$params["MyModelSearch"];
}

答案 2 :(得分:2)

  

在模型搜索类中,在搜索功能的开头添加以下代码:

if (!isset($params["MyModelSearch"])) {
 if (isset(Yii::$app->session["mymodelsearch"])){
  $params["MyModelSearch"]=Yii::$app->session["mymodelsearch"];
}
}
else{
   Yii::$app->session["mymodelsearch"]=$params["MyModelSearch"];
}

您好, 谢谢你的解决方案。它适用于值过滤器,但不适用于排序过滤器。我们如何解决这个问题?

答案 3 :(得分:0)

我无法对Herbert Maschke代码发表评论,我实现了它并且运行良好但后来我发现如果我选择了我的gridview选项,如Edit然后又回去了,过滤器也保留了它们的值和分页但是在下一个点击其他页码,过滤器丢失。我做了一项对我有用的改进。

$searchModel = new CustomerSearch();

$params = Yii::$app->request->queryParams;

if (count($params) <= 1) {
  $params = Yii::$app->session['customerparams'];
  if(isset(Yii::$app->session['customerparams']['page'])) <<------
    $_GET['page'] = Yii::$app->session['customerparams']['page']; <<------
  } else {
    Yii::$app->session['customerparams'] = $params;
}

$dataProvider = $searchModel->search($params);

似乎只有页面参数被恢复到$_GET(后来$_GET被用于分页并丢失了所有过滤器)所以我更改了这两行:

if(isset(Yii::$app->session['customerparams'])) {
    $_GET = Yii::$app->session['customerparams'];

答案 4 :(得分:0)

我进行了更改以更正页面更改

$searchModel = new MyModelSearch();

$params = Yii::$app->request->queryParams;

if(count($params) <= 1){
    //si es menor o igual a uno osea no ha realizado busqueda alguna          
    if(isset(Yii::$app->session['MyModelSearch'])) {
        $params = Yii::$app->session['MyModelSearch'];
    }else{
        Yii::$app->session['MyModelSearch'] = $params;
    }
}else{  
    if(isset(Yii::$app->request->queryParams['MyModelSearch'])){
        Yii::$app->session['MyModelSearch'] = $params;
    }else{
        $params = Yii::$app->session['MyModelSearch'];
    }       
}

$dataProvider = $searchModel->search($params);