【问题标题】:Yii2, GridView, save filters value in sessionYii2,GridView,在会话中保存过滤器值
【发布时间】:2019-08-15 22:15:51
【问题描述】:

是否有任何解决方案可以保存过滤器(在会话中),以便用户在回来时可以看到“上次使用的过滤器”?

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

【问题讨论】:

    标签: php session gridview yii2


    【解决方案1】:

    这有点像 hack,但这为我节省了过滤器、页面和排序。

    把它放在你的控制器中,假设你的模型叫做Customer

        $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);
    

    【讨论】:

      【解决方案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】:

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

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

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

        【讨论】:

          【解决方案4】:

          我无法评论 Herbert Maschke 代码,我实现了它并且运行良好,但后来我发现,如果我选择我的 gridview 的一个选项,如编辑然后返回,过滤器也会保留它们的值和分页,但在接下来单击另一个页码,过滤器会丢失。我做了一个对我有用的改进。

          $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'];
          

          【讨论】:

            【解决方案5】:

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

            $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);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-02-12
              • 1970-01-01
              • 2016-02-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-05-23
              相关资源
              最近更新 更多