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

时间:2015-11-09 12:09:36

标签: php sorting gridview filter yii2

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

对此有何想法? 感谢

5 个答案:

答案 0 :(得分:10)

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

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

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

     return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
     ]);
}

假设您希望在加载页面时使用动态过滤器

将链接用作

  ?

../的index.php R =用户/索引&安培; 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,
     ]);
}

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

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

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

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

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

         $this->load($params);
         $query->andFilterWhere(['active_status' => 1]);
         ....

此方法将为您提供无限的方法来过滤您的结果。 希望这会有所帮助..

答案 1 :(得分:4)

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

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,
     ]);
}

这有助于执行操作过滤器,对于所有人来说,在我的情况下,我需要在环境中单独使用

答案 2 :(得分:1)

Yii2 ActiveDataProvider它自己需要query builder,意味着您可以在向查询对象传递结果时过滤结果,例如:

$query = Post::find()->where['status' => 'published'];
// Todo and more conditions with $query object
$provider = new ActiveDataProvider([
    'query' => $query,
    'pagination' => [
        'pageSize' => 20,
    ],
]);

答案 3 :(得分:0)

有点晚了,但只是为了记录SO。

在Yii2 GridView窗口小部件中设置允许的过滤器的一种方法是使用其filterModel对象的rules函数返回使用save属性设置的有用过滤字段。因此,您可以从此列表中删除不需要在GridView

中显示的所有不需要的过滤器

然后,您可以在ActiveDataProvider的{​​{1}}函数下自定义search查询,以正确构建请求的过滤数据。

答案 4 :(得分:-2)

public function actionIndex()
{

     $searchModel = new UserSearch(); 

     // Filtro por Defecto y Reflejado en Formulario de Filtrado en Grid 
     $params = Yii::$app->request->queryParams;  
     if (!isset($params['UserSearch'])) {
        $params['UserSearch']['status']=1;            
     }   
     $dataProvider = $searchModel->search($params);   

     // -----------------------------------------------------------     

     return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
     ]);
}