php - 如何为 yii2 ListView 小部件使用自定义过滤器?

标签 php yii2

在我的 Controller 中我渲染了 $dataProvider

$searchModel = new StudentSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

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

这是StudentSearch的搜索功能

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

       $query->andFilterWhere([
        'student_id' => $this->student_id,
        'age' => $this->age,

    ]);

    $query->andFilterWhere(['like', 'firstname', $this->firstname]);

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


    if (!($this->load($params) && $this->validate())) {
        return $dataProvider;
    }

    return $dataProvider;
}

在 View 中,我在 ListView 小部件中使用了 $dataprivider,如下所示

  <div class="listView">

   <?php
    echo ListView::widget([
   'dataProvider' => $dataProvider,
    'itemView' => '_student_list',
    ]);
    ?>

  </div>

在“_student_list.php”中我列出了学生

我的过滤器

  <div class="listFilter">
   <input type="text" name="firstname"/>
   <input type="text" name="age"/>
 </div>

现在我想按名字或年龄过滤学生。我怎样才能做到这一点?如果您对此问题有任何解决方案,请提供帮助。谢谢。

最佳答案

1) 将过滤器表单添加到您的 View 中:

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;

/* @var $form yii\widgets\ActiveForm */
?>

<div class="student-form">
    <?php $form = ActiveForm::begin(['method' => 'get']); ?>

    <?= $form->field($searchModel, 'firstname') ?>

    <?= $form->field($searchModel, 'age') ?>

    <div class="form-group">
        <?= Html::submitButton('Apply', ['class' => 'btn btn-success']) ?>
    </div>

    <?php ActiveForm::end(); ?>
</div>

2) 准备 StundentSearch 模型以根据收到的 GET 参数返回 dataProvider

这些属性必须在规则中指定才能大量分配它们。

public function rules()
{
    return [
        ['firstname', 'string'],
        ['age', 'integer'],
    ];
}

public function scenarios()
{
    // bypass scenarios() implementation in the parent class
    return Model::scenarios();
}

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

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

    if (!($this->load($params) && $this->validate())) {
        return $dataProvider;
    }

    $query->andFilterWhere(['age' => $this->age])
        ->andFilterWhere(['like', 'firstname', $this->firstname]);

    return $dataProvider;
}

关于php - 如何为 yii2 ListView 小部件使用自定义过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28646090/

相关文章:

mysql - 如何将原始 SQL 转换为 Yii2,如查找查询

php - Yii1:Yii2 中的 Controller::beforeRender

php - 如何将 Keycloak 设置为 humhub 的身份验证提供程序

php - Yii2:查询计数功能很慢,当不同的值

php - 使用 sha1 密码散列法恢复密码

php - 不明确的查询 [codeigniter]

php - 为 Laravel 路由添加 url 扩展

php - 我需要在 SQL 中进行左联接、自然联接还是简单联接?

php - 增加 PHP 内存限制(Apache、Drupal6)

php - 根据模式生成唯一的 id