You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:27:38