Yii2:将_search中的下拉列表选中值传递至index页面
解决方案:在Index页面显示选中的筛选年份
要在index页面展示从_search.php传递过来的选中年份,你只需要完成两个核心步骤:在控制器中传递选中的年份值到视图,然后在视图中根据这个值进行展示。以下是具体实现:
1. 控制器中传递选中的年份参数
打开你的控制器(比如YourController.php),找到actionIndex方法,在渲染视图时,把搜索模型中的year值传递给视图:
public function actionIndex() { $searchModel = new YourSearchModel(); // 替换成你的搜索模型类名 $dataProvider = $searchModel->search(Yii::$app->request->queryParams); // 获取用户选中的年份,若未选中(即选了"-- Select All Years --")则为空 $selectedYear = $searchModel->year ?? ''; return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, 'selectedYear' => $selectedYear, // 新增这行,把选中值传到视图 ]); }
2. 在Index视图中展示选中的年份
打开index.php,在GridView上方(或你想要显示的位置)添加以下代码,用来展示筛选状态:
基础版:直接显示年份值
<div class="mb-3"> <?php if ($selectedYear) { echo "当前筛选:<strong>{$selectedYear}</strong>"; } else { echo "当前筛选:所有年份"; } ?> </div>
进阶版:显示年份对应的名称(如果你的getYearsList()是键值对)
如果你的getYearsList()返回的是类似['2022'=>'2022年', '2023'=>'2023年']的键值对,你可以更友好地显示:
<div class="mb-3 alert alert-info"> <?php $yearsList = $searchModel->getYearsList(); $displayText = $selectedYear ? $yearsList[$selectedYear] : '所有年份'; echo "当前筛选:<strong>{$displayText}</strong>"; ?> </div>
用Yii Html Helper更规范的写法
如果你习惯使用Yii的Html辅助类,也可以这样写:
<div class="mb-3"> <?= $selectedYear ? Html::tag('span', "当前筛选年份:" . Html::tag('strong', $selectedYear), ['class' => 'text-primary']) : Html::tag('span', '当前显示:所有年份', ['class' => 'text-muted']) ?> </div>
这样处理后,用户提交搜索后,index页面就会清晰地显示当前的筛选年份啦~
内容的提问来源于stack exchange,提问作者loveonprogress
相关产品推荐
相关产品推荐

