How to use custom filter for yii2 ListView widget?

In my controller, I displayed $ dataProvider

$searchModel = new StudentSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); 

Here is StudentSearch search function

 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; } 

I used $ dataprivider in ListView widgets as below

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

In '_student_list.php' I have listed students

my filters

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

Now I want to filter Students by name or age. How can i do this? If you have any solution to this problem, please help. Thanks.

+7
php yii2
source share
1 answer

1) Add a filter form to your 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) Prepare the StundentSearch model to return the dataProvider depending on the received GET parameters.

These attributes must be specified in the rules for their mass purpose.

 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; } 
+6
source share

All Articles