加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 17:55:28 所属栏目:PHP教程 来源:网络整理
导读:在我的控制器中,我渲染了$dataProvider $searchModel = new StudentSearch(); $dataProvider = $searchModel-search(Yii::$app-request-queryParams); return $this-render('index',[ 'searchModel' = $searchModel,'dataProvider' = $dataProvider,]); 这是
在我的控制器中,我渲染了$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;
}

在视图中,我在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)在您的视图中添加过滤器表单:
<?php

use yiihelpersHtml;
use yiiwidgetsActiveForm;

/* @var $form yiiwidgetsActiveForm */
?>

<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)根据收到的GET参数准备StundentSearch模型以返回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',$this->firstname]);

    return $dataProvider;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读