gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:54:11 26 4
gpt4 key购买 nike

在我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com