php 使用Yii2的GridView中的默认过滤器

enxuqcxy  于 2023-10-15  发布在  PHP
关注(0)|答案(6)|浏览(107)

我不知道如何设置GridView的过滤器默认值。这意味着当页面加载,它会加载过滤器与特定的条件,我已经设置.
对此有什么想法吗?谢谢

aelbi1ox

aelbi1ox1#

一个简单的方法是使用搜索模型。
我使用默认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=user/index&UserSearch[id]=7
这将添加一个过滤器,其中id = 7即在我的情况下,因为id是主键,只有一个用户将被列出
比如说如果你想总是应用一个过滤器而不显示URL中的任何内容

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]);
         ....

这种方法将为您提供无限的方式来过滤您的结果。希望这对你有帮助。

tag5nh1u

tag5nh1u2#

我也有同样的问题,它对我很有效

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

这有助于执行过滤器的行动是必要的,并为所有,在我的情况下,我需要它单独在一个环境中

ny6fqffe

ny6fqffe3#

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 solo se aplique comobúsqueda por defecto('Si no se ha definido ninguna condición de filtrado')
注意:使用(!Isset($ params 'UserSearch'])),以便它仅作为默认搜索('如果未定义筛选条件')应用

tv6aics1

tv6aics14#

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

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

u1ehiz5o5#

有点晚了,但只是为了保持记录。
在Yii2 GridView小部件中设置允许的过滤器的一种方法是使用其filterModel对象的rules函数返回使用save属性设置的所需过滤字段。因此,您可以从此列表中删除所有不需要在GridView中显示的不需要的过滤器。
然后,您可以在filterModelsearch函数下自定义ActiveDataProvider查询,以正确构建请求的过滤数据。

pengsaosao

pengsaosao6#

更容易!

class YourModelSearch extends \app\models\YourModel
{
    public $status_id = 'published';
...

相关问题