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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |