使用Yii2在GridView中进行默认过滤

Fra*_*cis 3 php sorting gridview filter yii2

我不知道如何设置GridView的过滤器默认值.这意味着当页面加载时,它将加载具有我设置的特定条件的过滤器.

对此有何看法?谢谢

Mid*_*hun 10

一种简单的方法是使用搜索模型.

我正在使用Default Gii生成的代码来解释方法

public function actionIndex()
{
     $searchModel = new UserSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

     return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
     ]);
}
Run Code Online (Sandbox Code Playgroud)

假设您在加载页面时需要动态过滤器

使用链接作为

../index.php?r=user/index&UserSearch[id]=7

这将添加一个id为7的过滤器,即在我的情况下,因为id是主键,只列出一个用户

假如您想要始终应用过滤器而不在网址中显示任何内容

public function actionIndex()
{
     $searchModel = new UserSearch(); 
     $searchModel->name = 'mid'; 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

     return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
     ]);
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个过滤器,其中用户的名称包含字符串'mid'

如果你想要更高级的过滤器

您可以编辑UserSearch类中的search()函数,查询用于填充数据,ActiveDataProvider将可供您使用.假设您不想列出不活动的用户.

    public function search($params)
    {
         $query = User::find();

         $dataProvider = new ActiveDataProvider([
             'query' => $query,
          ]);

         $this->load($params);
         $query->andFilterWhere(['active_status' => 1]);
         ....
Run Code Online (Sandbox Code Playgroud)

这种方法将为您提供无限的方法来过滤您的结果..希望这有助于..


Liz*_*Liz 5

我有同样的问题,它对我有用

public function actionIndex()
{
     $searchModel = new UserSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
     $dataProvider->query->andFilterWhere(['status'=>1]); 
     return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
     ]);
}
Run Code Online (Sandbox Code Playgroud)

这有助于执行过滤器以获取需要的操作,对于所有人而言,在我的情况下,我需要在环境中单独使用它