Yii2 中 GridView 的默认过滤器

问题描述 投票:0回答:6

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

对此有什么想法吗? 谢谢

php sorting gridview filter yii2
6个回答
11
投票

执行此操作的一个简单方法是使用搜索模型。

我使用默认 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=用户/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,
     ]);
}

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

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

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

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

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

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

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


7
投票

我遇到了同样的问题,它对我有用

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

NOTA:Usar (!isset($params['UserSearch'])) para que alone se aplique como búsqueda por defeto ('Si no se ha definido ninguna condición de filtrado')

注意:使用 (**!Isset($params['UserSearch']) **) 使其仅用作 默认搜索('如果未定义过滤条件')


1
投票

Yii2 ActiveDataProvider 它本身需要一个 查询生成器,意味着您可以在将查询对象传递给它时过滤结果,例如:

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

0
投票

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

在 Yii2

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

然后您可以在

ActiveDataProvider
search
功能下自定义
filterModel
查询,以正确构建请求的过滤数据。


0
投票

更容易!

class YourModelSearch extends \yii\base\Model
{
public $status_id = 'published';
...
© www.soinside.com 2019 - 2024. All rights reserved.